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

Mat*_*ine 14 ant

在尝试编译需要的Javadoc标记时,$JAVA_HOME/lib/tools.jar我发现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
Run Code Online (Sandbox Code Playgroud)

据说ant -diagnostics,没有任何财产像jdk.home.因此,要使用tools.jar我必须做的事情:

<classpath location="${java.home}/../lib/tools.jar"/>
Run Code Online (Sandbox Code Playgroud)

所以,我有两个问题:

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

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

ing*_*ere 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收集更多信息.


gre*_*lon 5

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

<javac target="1.7" source="1.7" fork="true" ...>
Run Code Online (Sandbox Code Playgroud)

我将感谢任何能解释其原理的人。