1

在 ant 脚本中,我path设置了:

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

所以我在java任务中使用它:

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

如何使用classpath.idtobootclasspathjavaant 任务中设置类似于:

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

${classpath.id}此时蚂蚁还不知道。

4

2 回答 2

1

有一种特殊的语法可以获取由 Ant 引用 id 引用的东西的值。使用${ant.refid:classpath.id}而不是${classpath.id}.

请参阅使用 ${ant.refid:}获取引用的值以获取参考。

于 2016-07-15T09:04:28.577 回答
0

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

使用 ${ant.refid:} 前缀

这是最干净的解决方案,所有的功劳归于 martin Clayton指出的。只需使用

<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

Whilebootclasspathref仅适用于javac,bootclasspath可以嵌套在java:

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

但是,这种解决方案存在一些问题。

  • <bootclasspath>替换了实际的bootclasspath,从中移除了java的jar,并且<bootclasspath/a>ant中目前还没有嵌套标签。
  • 在 java SE 9 中,-Xboothclasspath属性不再可用。只有-Xboothclasspath/a,所以<bootclasspath>在那里不起作用。
于 2016-07-19T15:51:40.513 回答