让我先说一下我是Ant的新手。就像我在2天前开始学习它来完成这项任务一样。
我要做的是创建一个"主人"调用其他几个ant脚本的ant脚本。例如:
Project A
- contains build.xml, target "makeProjectAjar"
- output: A.jar
Project B
- contains build.xml, target "makeProjectBjar"
- output: B.jar
Project C
- contains build.xml, target "makeProjectCjar"
- output: C.jar
Project D
- contains build.xml, target "finalPackage"
- Must first build Project A, Project B, Project C
- Copy A.jar, B.jar, C.jar to Project D
- Package all of this into D.jar
现在我已经为A,B和C工作了所有个人构建。通过这个,我的意思是我可以运行' ant'从这些文件夹中的任何一个,它将构建项目并生成一个jar文件。如果我用这种方式构建A,B和C,我有3个jar文件。然后我可以将它们复制到D中并将其打包到最终的jar中。这很好。
但我想要的是能够从Project D的build.xml中触发A,B和C版本。我已经尝试过这个:
<?xml version="1.0" encoding="UTF-8"?>
<project name="CommonJava" default="makeCommonJavaJar" basedir=".">
<import file="../Common/build.xml"/>
<import file="../CommonAndroid/build.xml"/>
<target name="makeCommonJavaJar" description="Create a jar for the CommonJava project"
depends="clean">
<mkdir dir="build" />
<jar jarfile="./build/commonjava.jar" includes="*.class" />
</target>
<target name="clean">
<delete dir="build" />
</target>
<target name="build+package" description="Build all prerequisites and package them">
<antcall target="makeCommonJar"/>
<antcall target="makeAndroidJar"/>
</target>
</project>
makeCommonJar是Common / build.xml(项目A)中的目标,makeAndroidJar是../CommonAndroid/build.xml(项目B)中的目标。但是,似乎在使用<import>
时,它从调用文件夹的上下文运行。项目B引用的含义资源不可用,因为它从项目D运行。这有意义吗?
长问题简短...使用Ant,如何在其他项目中调用build.xml文件以便首先构建这些项目?
答案 0 :(得分:6)
以下是一些一般性指导原则(不是规则,Ant非常自由):
import
任务通常用于分享一些构建机制,而不是像你一样的构建工作流程。例如,构建jar的目标,由目标目录等一些属性参数化。subant
和ant
任务首选用于触发其他项目的构建所以这就是项目D的build.xml:
<project name="CommonJava" default="makeCommonJavaJar" basedir=".">
<target name="build-deps">
<ant antfile="../Common/build.xml" target="makeCommonJar"/>
<ant antfile="../CommonAndroid/build.xml" target="makeAndroidJar"/>
</target>
<target name="makeCommonJavaJar" depends="build-deps">
<mkdir dir="build" />
<jar jarfile="./build/commonjava.jar" includes="*.class" />
</target>
</project>