15

$JAVA_HOME/lib/tools.jar尝试编译java.home需要. 我因此验证了这一点:$JAVA_HOME/jre$JAVA_HOME

<echo>${java.home}</echo>
<echo>${env.JAVA_HOME}</echo>

[echo] /usr/java/jdk1.7.0_21/jre
[echo] /usr/java/jdk1.7.0_21

根据ant -diagnostics,没有像 a 那样的属性jdk.home。因此,要使用tools.jar我必须这样做:

<classpath location="${java.home}/../lib/tools.jar"/>

所以,我有两个问题:

1) 我的 ant 设置是否有问题导致java.home指向 JRE 而不是 JDK?

2)如果这蚂蚁应该工作的..方式,在我的类路径中使用我应该做的事情吗?还是我应该做${env.JAVA_HOME}/lib/tools.jar?还是完全不同的东西?

4

2 回答 2

7

以下是答案:

  1. “我的设置有什么问题吗……?” 不。Ant 正在根据 JVM 系统属性设置它的内部 java.home。HotSpot(JVM 内部)的代码将其设置为故意附加“/jre”。事实上,Java(TM) 系统属性教程正是这样描述的。ant 内部的“java.home”变量实际上与在您的环境中设置的“JAVA_HOME”不同——不同但名称相似。

  2. “(什么是)我应该做事的方式?” 您真的可以做任何您认为合适的事情,但请记住,Ant 可以而且通常确实在单独的 JVM 进程中运行。我假设您的系统环境可能指定了用于开发应用程序的 JVM,因此我将只使用“${env.JAVA_HOME}”来确保开发期望符合构建期望。

有关更多信息,请在此处查看另一个类似的答案

此外,考虑到可以通过使用 -debug、-diagnostics 和/或 -verbose 标志运行 ant 从 ant 收集更多信息。

于 2013-07-24T23:25:21.923 回答
4

有同样的问题。我发现添加fork="true"javac标签可以解决这个问题。所以做这样的事情:

<javac target="1.7" source="1.7" fork="true" ...>

我会感谢谁能解释为什么会这样。

于 2015-11-08T15:00:32.393 回答