Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Ant构建当前构建目标的依赖项_Java_Ant - Fatal编程技术网

Java 使用Ant构建当前构建目标的依赖项

Java 使用Ant构建当前构建目标的依赖项,java,ant,Java,Ant,假设我有一个库和一个二进制目标,让我们称它们为MyLib和MyBin, MyBin取决于MyLib 我正在尝试为MyBin创建一个Ant构建文件,该文件首先构建MyLib,然后在构建MyBin时将其包含在类路径中 我尝试过使用Ant任务,如中所示 但是,它不起作用,从ant-v我认为MyBinbuilddeps目标甚至没有构建MyLib。似乎它混淆了MyBin和MyLib属性?但我不知道如何防止这种情况 我只在下面转储MyBin/build.xml,但是MyLib几乎相同,只是它没有build

假设我有一个库和一个二进制目标,让我们称它们为
MyLib
MyBin
MyBin
取决于
MyLib

我正在尝试为
MyBin
创建一个Ant构建文件,该文件首先构建
MyLib
,然后在构建
MyBin
时将其包含在类路径中

我尝试过使用Ant任务,如中所示

但是,它不起作用,从
ant-v
我认为
MyBin
builddeps
目标甚至没有构建
MyLib
。似乎它混淆了
MyBin
MyLib
属性?但我不知道如何防止这种情况

我只在下面转储
MyBin/build.xml
,但是
MyLib
几乎相同,只是它没有
build deps
目标

<project name="MyBin" default="main" basedir=".">
    <property name="projectName" value="MyBin" />
    <property name="src.dir" location="src" />
    <property name="build.dir" location="bin" />
    <property name="dist.dir" location="dist" />
    <property name="dist.lib.dir" location="dist/lib" />
    <property name="lib.dir" value="lib" />


<target name="build-deps" depends="init">
<!-- MyLib main target does clean -> build -> jar to dist folder -->
<!-- Its build.xml uses many of the same property values as above -->
        <ant antfile="../MyLib/build.xml" target="main"/>
</target>

<path id="classpath">
    <fileset dir="${basedir}/">
        <include name="../MyLib/dist/**/*.jar" />
    </fileset>
</path>

<!-- Need classpath to run this -->
<target name="compile" depends="build-deps" description="compile the source ">
    <javac includeantruntime="false" srcdir="${src.dir}"
                   destdir="${build.dir}" classpathref="classpath" />
</target>

<!-- Group all dependencies into a big dependency-all.jar -->
<target name="copy-dependencies">

    <mkdir dir="${dist.lib.dir}" />

    <jar jarfile="${dist.lib.dir}/dependencies-all.jar">
        <zipgroupfileset dir="${lib.dir}">
            <include name="**/*.jar" />
        </zipgroupfileset>
    </jar>

</target>

<!-- jar it, extract above dependency-all.jar and zip it with project files -->
<target name="jar" depends="compile, copy-dependencies"
            description="package, output to JAR">

    <mkdir dir="${dist.dir}" />
    <mkdir dir="${dist.lib.dir}" />

    <jar jarfile="${dist.dir}/${projectName}.jar" basedir="${build.dir}">
        <manifest>
            <attribute name="Main-Class" value="${main-class}" />
        </manifest>
        <zipfileset src="${dist.lib.dir}/dependencies-all.jar"
                            excludes="META-INF/*.SF" />
    </jar>

</target>

<target name="clean" description="clean up">
    <delete dir="${build.dir}" />
    <delete dir="${dist.dir}" />
</target>

<!-- Default, run this -->
<target name="main" depends="clean, compile, jar" />
</project>

关于你的具体问题:

好像把MyBin和MyLib属性搞混了?我不知道怎么做 为了防止这种情况

您正在使用它来调用
MyLib
构建:

<ant antfile="../MyLib/build.xml" target="main" />
它将在指定的目录中运行
build.xml
,设置
basedir
属性,并调用默认目标,如果您所说的库使用非常类似的构建文件,则默认目标应该是
main
。如果在执行
MyLib
任务时不想从
MyBin
继承属性,请在任务中指定
inheritAll=false

dir
属性的任务文档中:

用作新Ant项目的basedir的目录(除非 useNativeBasedir设置为true)。默认为当前项目的 basedir,除非inheritall已设置为false,在这种情况下 没有默认值。这将覆盖basedir设置 被称为项目的一部分。还用作解决问题的目录 antfile和输出属性的值(如果有)


我现在收到了一条不同的错误消息,很明显,它被配置为遵循
MyBin/build.xml
ant任务(来自
。/MyLib
),因为错误消息是无法找到一个目录,而该目录只在
MyBin/build.xml
(我已经尝试过显式地指定
antfile
以及只指定
dir
)。我想要一个气密的
MyLib
ant构建,后面是
MyBin
(然后将
MyLib
输出拉入类路径).我想你给我指出了正确的方向,但我会花一些时间处理各种ant任务选项并报告。是的,
inheritAll=false1似乎采取了一些技巧,迫使MyLib`build保持气密性。
<ant antfile="../MyLib/build.xml" target="main" />
<ant dir="../MyLib" />