【问题标题】:Ant: Converting a path into separate propertiesAnt:将路径转换为单独的属性
【发布时间】:2011-11-22 19:33:48
【问题描述】:

我有一个包含几个 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 中有可能吗?

谢谢,彼得

【问题讨论】:

  • 您打算如何知道属性名称?
  • 例如,它们应该像 jar 的名称一样简单地调用,所以 foo.jar ==> ${foo.jar}。但实际上我不需要这些名称,因为我只需要它们作为属性,因此我的 Eclipse .classpath 文件是正确编写的

标签: ant properties jar classpath


【解决方案1】:

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

【讨论】:

  • 但这不是属性?
  • 感谢您的提示!我实际上将所有 jar 文件转储到一个文件中,然后使用 将它们作为属性
【解决方案2】:

Ivy 有一个 artifactproperty 任务,旨在为您执行此操作。

此解决方案的唯一问题是它假定您使用 ivy 来解决依赖关系并管理您的类路径。

【讨论】:

    【解决方案3】:

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

    <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 文件中起作用。我现在没有一个在我面前。如果你必须操纵它,你可以通过带有过滤器链的&lt;concat&gt; 任务来做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多