当前位置: 首页 > 知识库问答 >
问题:

如何执行一个涉及许多项目的大ant脚本的好重构?

侯英达
2023-03-14

我对Ant很陌生(我来自Maven,此时Ant是我的噩梦)。

我有以下情况:

2)为每个项目创建一个名为Release的目录(在适当的项目中),并将与该项目相关的.jar文件放入其中(例如,其中一个项目名为ShellExtBridge,因此Ant脚本将创建以下目录:ShellExtBridge/Release,并将ShellExtBridge的创建的.jar文件放入该目录中)。

3)最后为主项目(CrystalIceGUI)创建以下结构:在CrystalIceGUI项目中创建一个名为Relaese的目录,并将与CrystalIceGUI项目相关的.jar文件放在这个目录中。

此外,创建这个目录crystaliceGui/release/lib,它包含之前为依赖项目创建的所有.jar。

现在我的问题是:老板要求我为每个项目创建一个Ant脚本。这些Ant脚本只需在每个项目中创建一个发布文件夹,为该项目创建jar,并将jar放入该发布文件夹。但我对我必须怎么做有点困惑。

我的想法是这样的:对于每个项目,我从旧的Ant脚本(执行主项目中所有工作的脚本)中获取与我正在工作的项目相关的部分。

例如,对于前面名为ShellextBridge的子项目:我从旧的build.xml ant脚本中获取了这部分html" target="_blank">html" target="_blank">代码:

<target name="shellextbridge" 
    description="Packs classes of shellextbridge">
    <mkdir dir="${project.libdir}" />
    <javac srcdir="${deps.shellextbridge.dir}/Project/src" destdir="${deps.shellextbridge.dir}/Project/bin"/>
    <jar destfile="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" index="false">
        <fileset dir="${deps.shellextbridge.dir}/Project/bin"/>
        <manifest>
            <attribute name="Created-By" value="${info.software.author}" />
            <attribute name="Main-Class" value="com.techub.crystalice.rmi.Main"/>
        </manifest>
    </jar>
    <copy file="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" tofile="${project.libdir}/${deps.shellextbridge.jar}"/>
    <copy file="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" tofile="${project.deploy}/lib/${deps.shellextbridge.jar}"/>
    <copy file="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" tofile="${project.dev.deploy.dir}/${deps.shellextbridge.jar}"/>
</target>

并将其放入一个新的build.xml ant脚本中,该脚本是ShellExtBridge项目专用的(更改路径)

是不是一个很好的解决办法去做他们要求我做的事?

TNX

安德里亚

共有1个答案

桂玉石
2023-03-14

来自Maven的您已经习惯了标准的项目源代码布局,您也将熟悉构建插件。

首先,我建议确定构建逻辑的公共部分,并考虑创建一组ANT宏DEF。接下来,研究如何创建一个ANTlib来保存构建的宏文件。这将是一个jar文件,可以包含在每个构建中,保存公共构建逻辑。

最后,如果您决定将公共逻辑保存在ANTLIB中,这意味着您可以支持构建版本控制,模拟Maven如何支持不同版本的构建插件。在需要在不破坏旧版本的情况下进行更改时非常有用。

  • 如何在Jenkins上跨多个项目构建作业管理公共ant构建脚本
 类似资料:
  • 是的,是的,这是一个XY类型的问题。(我想在不丢失任何信息的情况下更好地展示它。) 在我的项目中,当我试图在maven中执行ANT任务时,它给出了与本示例中相同的错误。我举了这个例子。 我尝试使用下面的< code>maven-antrun-plugin来执行多个ant目标。但是,它总是只执行下面的目标(当我没有提到依赖属性时)。当我使用它时,它给出以下异常: 啪.xml 这是什么原因呢?如何在m

  • 请给一些建议来解决这个问题?

  • 我正在构建一个画廊应用程序。我的主要活动中有一个扩展PagerAdapter的内部类: 项是动态创建的。我的应用允许用户在这些页面(项目)中缩放图片,并且当我轻扫到下一页时,ViewPager 会保存缩放状态。但是当我返回到上一页时,我希望看到默认大小的图片,而无需任何更改。 考虑到存储的项目是动态创建的,当它们再次出现在屏幕上时,我该如何影响这些项目?

  • 问题内容: 我有: 我想把这些陈述变成几句话。 问题答案: 否。附加整个序列的方法是。

  • 我有一个gradle多项目构建,每个子项目都在单独的git存储库中。在根项目的build.gradle,我试图为所有子项目定义一个任务,它将为每个项目执行一些git命令。但是,任务的工作目录始终是根项目的工作目录。 如何根据当前执行任务的子项目更改workingDir?

  • 我写了一个简单的脚本,将具有单个值的列添加到现有文件中,我想为位于一个文件夹中的其他几个文件运行它,知道我该怎么做吗? python脚本如下所示: