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" />