使用Ant构建其他依赖项目

AWT*_*AWT 3 java ant build target

让我先说一下我是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
Run Code Online (Sandbox Code Playgroud)

现在我已经为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>
Run Code Online (Sandbox Code Playgroud)

makeCommonJar是Common/build.xml(项目A)中的目标,makeAndroidJar是../CommonAndroid/build.xml(项目B)中的目标.但是,似乎在使用时<import>,它从调用文件夹的上下文运行.项目B引用的含义资源不可用,因为它从项目D运行.这有意义吗?

很长的问题......使用Ant,如何在其他项目中调用build.xml文件以便首先构建这些项目?

小智 6

以下是一些通用指南(不是规则,Ant非常自由):

  • build.xml通常设计为在特定项目上运行,因此不会在其他构建中"导入"
  • import任务通常用于分享一些构建机制,而不是像你一样的构建工作流程.例如,构建jar的目标,由目标目录等一些属性参数化.
  • subantant任务,优选用于触发建立其他项目

所以这就是项目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>
Run Code Online (Sandbox Code Playgroud)

http://ant.apache.org/manual/Tasks/ant.html