2011-09-22 70 views
1

我有一个包含几个JAR文件,这都应该去classpath中的文件夹:蚂蚁:将路径转换成单独的属性

<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) 

这个现象的原因可能在蚂蚁?

谢谢,彼得

+0

您打算如何知道属性名称? –

+0

例如,他们应该简单地被称为像jar的名称,所以foo.jar ==> $ {foo.jar}。 但实际上我不需要这些名称,因为我只是需要它们的属性,所以我的Eclipse的.classpath文件被正确写入 –

回答

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

+0

但是这不是属性? –

+0

@Peter我刚纠正了我的帖子 –

+0

感谢您的提示! 我实际上将所有jar文件转储到一个文件,然后使用将它们作为属性 –

0

常春藤有artifactproperty任务是为你设计的。

这个解决方案唯一的解决方案就是假设你使用ivy来解决你的依赖和管理你的类路径。

0

一个简单的方法来获得整个classpath中到一个单一的属性:

<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>任务和过滤链来完成。