ant $ {java.home}指向$ JAVA_HOME / jre,而不是$ JAVA_HOME

时间:2013-07-03 00:39:01

标签: ant

当尝试编译需要$JAVA_HOME/lib/tools.jar的Javadoc标记时,我发现ant(版本1.8.4)将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,没有像jdk.home这样的属性。因此,要使用tools.jar,我必须这样做:

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

所以,我有两个问题:

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

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

2 个答案:

答案 0 :(得分:7)

以下是答案:

  1. “我的设置有问题......?”没有.Ant根据JVM系统属性设置它的内部java.home。 HotSpot(JVM内部)的代码设置为有意添加“/ jre”。实际上,Java(TM) Tutorials for System Properties完全按照这种方式描述了它。内部ant中的“java.home”变量实际上与您环境中设置的“JAVA_HOME”不同 - 不同但名称相似。

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

  3. 有关详细信息,请参阅another similar answer here

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

答案 1 :(得分:2)

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

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

我会感谢任何能解释其原因的人。