如何执行一个涉及很多项目的大型ant脚本的重构?
我在Ant中很新(我来自Maven,此时Ant是我的噩梦)。
我有以下情况:
在Eclipse工作区中,我有一些Java项目互相交互组成最终的单个应用程序。
其中一个实现应用程序GUI的项目(名为CrystalIceGUI )本身包含唯一的build.xml Ant脚本,它最多可以简化以下操作:
1) 编译所有项目 (这些项目被视为CrystalIceGUI项目的依赖项)
2)为每个项目创建一个名为Release的目录(在正确的项目中),并将与该项目相关的.jar文件放入其中。 (例如,这些项目中的一个名为ShellExtBridge,所以Ant脚本将创建以下目录:ShellExtBridge /释放 ,并把ShellExtBridge的创建.jar文件此目录中。
3)最后,创建为主营项目(CrystalIceGUI)以下结构:创建一个名为Relaese到CrystalIceGUI项目,并在此目录中的目录把相关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如何支持不同版本的构建插件。 在需要进行更改而不会破坏旧版本的情况下非常有用。
有关更多详情,请参阅以下答案:
关于定义通用构建逻辑的问题; 在多个项目中重复使用它; 并在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?