Ant:将路径转换为单独的属性

时间:2011-09-22 12:45:04

标签: ant properties jar classpath

我有一个包含几个jar文件的文件夹,它们都应该转到类路径:

<path id="my.classpath">
    <fileset dir="/tmp/mylibs" includes="*.jar" />
</path>

现在我希望能够将所有这些jar文件作为单独的属性引用, 例如如果我有两个jar文件foo.jar和bar.jar那么我希望能够像

那样引用它们
${foo.jar} (== /tmp/mylibs/foo.jar) 
${bar.jar} (== /tmp/mylibs/bar.jar)

这在Ant中是否有可能?

谢谢,彼得

3 个答案:

答案 0 :(得分:0)

ant-contrib的帮助下,你可以试试这个:

<target name="test">
    <ac:for param="file">
        <fileset dir="/tmp/mylibs" includes="*.jar"/>
        <sequential>
                <antcall target="setImpl">
                    <param name="file" value="@{file}"/>
                </antcall>
                <echo>param: @{file}</echo>
        </sequential>
    </ac:for>
</target>

<target name="setImpl">
    <property name="filename" value="${file}" />
    <echo>property: ${filename}</echo>
</target>

对于覆盖属性值(如果需要),您还可以使用ant-contrib

答案 1 :(得分:0)

Ivy有artifactproperty任务,旨在为您完成此任务。

此解决方案的唯一问题是,它假设您使用常春藤来解析依赖关系并管理类路径。

答案 2 :(得分:0)

将整个类路径放入单个属性的简单方法:

<path id="my.classpath">
    <fileset dir="/tmp/mylibs" includes="*.jar" />
</path>

<property name="classpath.property" refid="my.classpath"/>

<echo message="Classpath = &quot;${classpath.property}&quot;"/>

我相信这可以在Eclipse .classpath文件中使用。我现在面前没有一个人。如果你必须操纵它,你可以通过带有过滤链的<concat>任务来完成它。