我有一些模块和一个主要的可运行项目。我有共同的构建文件,
build.common.xml
<target name="build" >
<path id="libraries.classpath">
<fileset dir="${lib.dir}" includes="*.jar" />
</path>
<javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" source="1.6">
<classpath refid="libraries.classpath" />
<classpath refid="modules.classpath" />
</javac>
</target>
..并且每个模块在build.xml中声明自己的依赖项:
<path id="modules.classpath">
<pathelement path="../ModuleA/${build.dir}" />
...
</path>
问题是如果没有内部依赖,我会得到以下异常: “找不到参考modules.classpath。”
解决方案是什么? 我如何声明可选的classpath元素?
注意: 如果有人想建议从我的模块中创建jar,请证明这一点。我将有5-10个快速更改的模块,我不想在构建过程中执行不必要的步骤。
更新:我将构建解压缩到两个不同的目标并为它们创建了条件,但没有帮助(它回应'false'并使用模块依赖构建):
<target name="build">
<condition property="modules.classpath.set" else="false">
<isset property="modules.classpath"/>
</condition>
<echo message="modules.classpath is set: ${modules.classpath.set} " />
<antcall target="build-with-modules" />
<antcall target="build-without-modules" />
</target>
<target name="build-with-modules" if="modules.classpath.set">
<echo message="Building with module-dependencies" />
<javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" source="1.6">
<classpath refid="libraries.classpath" />
<classpath refid="modules.classpath" />
</javac>
</target>
<target name="build-without-modules" unless="modules.classpath.set">
<echo message="Building with no dependent modules" />
<javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" source="1.6">
<classpath refid="libraries.classpath" />
</javac>
</target>
答案 0 :(得分:1)
条件isreference
:
测试是否已在此项目中定义了给定引用,并且 - 可选 - 是否为预期类型。
所以,试试
<condition property="modules.classpath.set" else="false">
<isreference refid="modules.classpath"/>
</condition>
同样在该页面上,有一个描述自定义条件的页面的链接。如果所提供的条件都不符合您的要求,那么只需写一个。
更新
if
中unless
和<target>
的逻辑是检查属性是否已设置 - 对于if
,目标在设置属性时运行;对于unless
,目标在未设置属性时运行 - 而不是属性的值。
我从未检查条件isreference
的代码,但我认为可能应删除else="false"
。
如果删除该部分仍无效,那么您可能需要使用一些嵌入式groovy或beanshell脚本,或编写自己的条件。