在bootclasspath

时间:2016-07-14 17:18:24

标签: java ant bootclasspath

在ant脚本中,我设置了path

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

因此我在java任务中使用它:

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

如何使用classpath.idbootclasspath ant任务中设置java,类似于:

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

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

2 个答案:

答案 0 :(得分:1)

有一种特殊的语法可以获取Ant引用ID引用的内容的值。使用${ant.refid:classpath.id}代替${classpath.id}

请参阅Getting the value of a Reference with ${ant.refid:}以供参考。

答案 1 :(得分:0)

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

使用$ {ant.refid:}前缀

这是最干净的解决方案,所有功劳归于martin clayton pointing to this one。只需使用

<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>替换了实际的bootclasspath,从中删除了java的jar,到目前为止,ant中没有<bootclasspath/a>嵌套标记。
  • 在java SE 9中, -Xboothclasspath 属性不再可用。只有 -Xboothclasspath / a ,因此<bootclasspath>在那里不起作用。