在引导类路径中使用 ant 路径作为属性



在蚂蚁脚本中,我设置了path

<path id="classpath.id">
  <pathelement path="somepath_1" />
  ...
  <pathelement path="somepath_n" />
</path>

所以我java任务中使用它:

<java ... classpathref="classpath.id">
 ...
</java>

如何使用classpath.id在 ant 任务中设置bootclasspath java类似于:

<java ...>
  <jvmarg value="-Xbootclasspath/a:${myjar.jar}${path.separator}${classpath.id}"/>
</java>

蚂蚁目前还不知道${classpath.id}

有一种特殊的语法用于获取 Ant 引用 ID 所引用的内容的值。 使用 ${ant.refid:classpath.id} 而不是 ${classpath.id}

有关参考,请参阅使用 ${ant.refid:} 获取引用的值

为了完整起见,以下是可能的解决方案:

使用 ${ant.refid:} 前缀

这是最干净的解决方案,所有的功劳都归功于马丁克莱顿指出这个。只需使用

<java ...>
  <jvmarg value="Xbootclasspath/a:${myjar.jar}${path.separator}${ant.refid:classpath.id}"/>
</java>

创建新属性

<property name="classpath.property" refid="classpath.id"/>
<java ...>
  <jvmarg value="Xbootclasspath/a:${myjar.jar}${path.separator}${classpath.property}"/>
</java>

使用 bootclasspath 和 bootclasspathref

虽然bootclasspathref只对javac可用,但bootclasspath可以嵌套在java中:

<java fork="true" ...>
  <bootclasspath>
    <path refid="classpath.id"/>
    <pathelement path="${myjar.jar}" />
  </bootclasspath>
</java>

但是,此解决方案存在复杂性。

  • <bootclasspath>替换了实际的引导类路径,从中删除了Java的jar,到目前为止,ant中还没有<bootclasspath/a>嵌套标签。
  • 在 Java SE 9 中,-Xboothclasspath 属性不再可用。只有 -Xboothclasspath/a,所以<bootclasspath>在那里不起作用。

最新更新