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

我在Ant中很新(我来自Maven,此时Ant是我的噩梦)。

我有以下情况:

在Eclipse工作区中,我有一些Java项目互相交互组成最终的单个应用程序。

其中一个实现应用程序GUI的项目(名为CrystalIceGUI )本身包含唯一的build.xml Ant脚本,它最多可以简化以下操作:

1) 编译所有项目 (这些项目被视为CrystalIceGUI项目的依赖项)

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

3)最后,创建为主营项目(CrystalIceGUI)以下结构:创建一个名为RelaeseCrystalIceGUI项目,并在此目录中的目录把相关CrystalIceGUI项目.jar文件

此外,创建此目录CrystalIceGUI / Release / lib ,其中包含之前为依赖项目创建的所有.jar

现在我的问题是:老板要求我为每个项目创建一个Ant脚本 。 这些Ant脚本只需在每个项目中创建一个Release文件夹,为该项目创建jar并将该jar放入此Release文件夹中。 但是我对如何做这件事感到困惑。

我的想法是这样的一个:对于每一个项目我从旧的Ant脚本与上我的工作项目中的部分(即执行中的主要项目中的所有工作的脚本)。

例如,对于名为ShellExtBridge的前一个子项目:我从旧的build.xml ant脚本中获取这段代码:

<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

安德里亚


来自Maven你习惯于标准的项目源代码布局,你也会熟悉构建插件。

首先,我会建议识别常见的构建逻辑,并考虑创建一组ANT宏定义。 接下来研究如何创建一个ANTlib来保存您的构建的宏定义。 这将是一个jar文件,可以包含在每个构建中,并持有公共构建逻辑。

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

有关更多详情,请参阅以下答案:

  • 如何在jenkins上管理跨多个项目构建作业的通用ant构建脚本?

  • 关于定义通用构建逻辑的问题; 在多个项目中重复使用它; 并在Ant中定义常见构建阶段,我建议你看看Netbeans如何设置它的项目。 这会让你对build.xml重用有足够的理解。

    让我们说,你从识别5个阶段开始 - clean,init,build,dist,release(等等)。 你可以创建一个基本文件(可能位于$ root.dir / build / common.xml)。 在这个文件中,您可以继续创建将调用目标的序列。

    现在,如果你看看Netbeans如何设置项目,你会注意到一个目标 - 比如说构建 - 会调用目标-pre-build,-do-build,-post-build。 有效地,所有实际的代码都存在于这些额外的目标中。 这样做的好处是,在单个模块(已导入common.xml的地方)中,只能覆盖构建中需要特殊处理的那些部分。

    这样,您可以将每个项目单独移动到模块化构建系统。

    一旦运行了基本脚本,您就可以利用像Ivy(依赖管理)这样的库来利用包装等工作。

    或者,如果您计划将事物转移到可扩展的模块化系统,那么我还建议您使用Gradle - 这是一个Ant友好的,基于Java的构建平台。 我建议这样做的原因是,你最终将最终构建自定义任务,或者只是为了满足小的需求而做大量的杂耍工作......通过脚本代码你可能会做得更好。

    希望这可以帮助你。

    链接地址: http://www.djcxy.com/p/44405.html

    上一篇: How to execute a good refactor of a big ant script that involves many projects?

    下一篇: Eclipse 3.7 runs auto build before executing ant task