是否可以执行以下操作?
<target name="path-test">
<property name="d.file" value="ant/d.fileset" />
<property name="c.file" value="ant/c.fileset" />
<property name="e.file" value="ant/e.fileset" />
<available property="c.file.exists" file="${c.file}" />
<available property="d.file.exists" file="${d.file}" />
<available property="e.file.exists" file="${e.file}" />
<path id="classPathRef">
<fileset dir="${depot.dir}">
<include name="${c.file}" if="c.file.exists" />
<include name="${d.file}" if="d.file.exists" />
<include name="${e.file}" if="e.file.exists" />
</fileset>
</path>
</target>
在这种情况下,每个文件集文件都包含一个我希望在classPathRef中结束的jar列表。
答案 0 :(得分:4)
卫生署!
<target name="path-test">
<property name="d.file" value="ant/d.fileset" />
<property name="c.file" value="ant/c.fileset" />
<property name="e.file" value="ant/e.fileset" />
<available property="c.file.exists" file="${c.file}" />
<available property="d.file.exists" file="${d.file}" />
<available property="e.file.exists" file="${e.file}" />
<path id="classPathRef">
<fileset dir="${depot.dir}">
<includesfile name="${c.file}" if="c.file.exists" />
<includesfile name="${d.file}" if="d.file.exists" />
<includesfile name="${e.file}" if="e.file.exists" />
</fileset>
</path>
</target>
答案 1 :(得分:1)
我建议您查看使用常春藤来管理类路径。
在您的构建文件中,使用 retrieve 命令将jar复制到专用目录中:
<ivy:retrieve pattern="${lib.dir}/[conf]/[artifact].[ext]"/>
请注意 conf 参数。这指的是常春藤配置(类似于Maven中的范围)。它允许您对您所依赖的每个罐子进行分类。
现在每个jar集合都位于不同的目录中,构建文件中路径的声明变得微不足道了:
<path id="compile.path">
<fileset dir="${lib.dir}/compile"/>
</path>
<path id="test.path">
<fileset dir="${lib.dir}/test"/>
</path>
<path id="runtime.path">
<fileset dir="${lib.dir}/runtime"/>
</path>
定义jar分组的复杂性被委托给常春藤及其配置管理:
以下是控制 ivy.xml 文件
的示例<ivy-module version="2.0">
<info organisation="apache" module="hello-ivy"/>
<configurations>
<conf name="compile" description="Libraries needed for compilation"/>
<conf name="runtime" extends="compile" description="Libraries that should be included when deploying the code" />
<conf name="test" extends="runtime" description="Additional test libraries, not deployed" />
</configurations>
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.0" conf="build->default"/>
<dependency org="commons-cli" name="commons-cli" rev="1.0" conf="build->default"/>
<dependency org="junit" name="junit" rev="4.7" conf="test->default"/>
</dependencies>
</ivy-module>
魔术位是与每个依赖关联的 conf 属性。例如,Junit已被声明为 test 的一部分,这意味着它只出现在测试路径中。由于声明配置的方式,其他路径将出现在所有3个路径中。