【问题标题】:ant ${java.home} points to $JAVA_HOME/jre, not $JAVA_HOMEant ${java.home} 指向 $JAVA_HOME/jre,而不是 $JAVA_HOME
【发布时间】:2023-03-15 08:35:01
【问题描述】:

在尝试编译需要$JAVA_HOME/lib/tools.jar 的Javadoc taglet 时,我发现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) 如果这 ant 应该以这种方式工作,那么在我的类路径中使用.. 是我应该做的事情吗?还是我应该做${env.JAVA_HOME}/lib/tools.jar?还是完全不同的东西?

【问题讨论】:

  • ant 是一个 shell 脚本。尝试在 (+x) 上使用 shell 调试运行它。确保ant找到的java是真正的java(不是任何软链接)
  • 1) 我编辑了 shell 脚本,将echo $JAVA_HOME 放在最后一行之前,而此时它没有改变。 2) 我尝试重命名 JDK 目录并在其位置放置一个指向新名称的符号链接。 ${java.home} 更改以反映重命名的目录,因此它使用正确的目录。
  • 对不起,我直到现在才看到这个!

标签: ant


【解决方案1】:

以下是答案:

  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}”来确保开发期望符合构建期望。

更多信息请查看another similar answer here

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

【讨论】:

  • 我遇到了同样的问题,蚂蚁将 JAVA_HOME 指向 JAVA_HOME/jre instate of JAVA_HOME 我该如何解决这个问题?
  • 在此处查看问题后的评论:stackoverflow.com/questions/16533256
【解决方案2】:

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

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

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

【讨论】:

  • 您的环境可能将 $JAVA_HOME 设置为 JDK 路径。 Ant documentation 状态(关于 fork=true),“默认为当前运行 Ant 的 Java 版本的编译器。”因此,Ant 脚本本身不会设置错误的 JDK 路径——您确实必须更改 forkjavac 行为才能做到这一点。这些 jars 可以在它们应该位于的 JDK 中找到。
  • 我花了 3 个小时寻找解决方案。我终于找到了。我添加了 (fork="true") 并解决了我的所有问题。感谢分享这么多的感谢。
猜你喜欢
  • 2017-09-15
  • 2021-09-15
  • 2019-04-19
  • 1970-01-01
  • 2018-09-16
  • 2013-07-10
  • 2018-11-10
  • 1970-01-01
相关资源
最近更新 更多