当尝试编译需要$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
吗?或完全不同的东西?
答案 0 :(得分:7)
以下是答案:
“我的设置有问题......?”没有.Ant根据JVM系统属性设置它的内部java.home。 HotSpot(JVM内部)的代码设置为有意添加“/ jre”。实际上,Java(TM) Tutorials for System Properties完全按照这种方式描述了它。内部ant中的“java.home”变量实际上与您环境中设置的“JAVA_HOME”不同 - 不同但名称相似。
“(什么)我应该做的事情?”您可以真正做任何您认为合适的事情,但请记住,Ant可以并且通常在单独的JVM进程中运行。我假设您的系统环境可能正在指定用于开发应用程序的JVM,因此我只想使用“$ {env.JAVA_HOME}”来确保开发期望满足构建期望。
有关详细信息,请参阅another similar answer here。
另外,考虑通过使用-debug,-diagnostics和/或-verbose标志运行来从ant收集更多信息。
答案 1 :(得分:2)
有同样的问题。我发现将fork="true"
添加到javac
标记可以解决此问题。所以做这样的事情:
<javac target="1.7" source="1.7" fork="true" ...>
我会感谢任何能解释其原因的人。