在尝试编译需要的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?或完全不同的东西?
以下是答案:
"我的设置有问题......?" 没有.Ant根据JVM系统属性设置它的内部java.home.HotSpot(JVM内部)的代码设置为故意附加"/ jre".事实上,Java(TM)系统属性教程就是这样描述的.内部ant中的"java.home"变量实际上与您环境中设置的"JAVA_HOME"不同 - 不同但名称相似.
"(什么)我应该做的事情?" 您可以真正做任何您认为合适的事情,但请记住,Ant可以并且通常在单独的JVM进程中运行.我假设您的系统环境可能正在指定用于开发应用程序的JVM,因此我只想使用"$ {env.JAVA_HOME}"来确保开发期望满足构建期望.
有关详细信息,请参阅此处的其他类似答案.
此外,考虑通过使用-debug,-diagnostics和/或-verbose标志运行,可以从ant收集更多信息.
有同样的问题。我发现添加fork="true"到javac标签可以解决这个问题。所以做这样的事情:
<javac target="1.7" source="1.7" fork="true" ...>
Run Code Online (Sandbox Code Playgroud)
我将感谢任何能解释其原理的人。
| 归档时间: |
|
| 查看次数: |
16200 次 |
| 最近记录: |