繁体   English   中英

蚂蚁没有使用我的JAVA_HOME查找tools.jar

[英]Ant not using my JAVA_HOME to find tools.jar

我意识到这个问题最初听起来像是其他一些问题的重复,但是我看过的其他所有问题都没有解决我的问题。

简短的故事是我在不同的位置安装了JRE和JDK。 我将JAVA_HOME为指向JDK,但ant似乎仍在JRE位置搜索tools.jar 我不确定这与我的ant安装/配置或JDK安装/配置是否有更多关系。

长话短说:

环境

我在没有任何东西的sudo特权的帐户上运行Red Hat Enterprise Linux Server 7.5(Maipo)。

我的JDK安装

该机器已经在/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/jre/bin/java安装了JRE。 我不允许修改该安装,但是可以在单独的位置创建自己的Java安装。

我的网络对安全性的要求非常严格,只允许在计算机上放置特定的软件。 可以请求其他软件的许可,但是我必须经历一个非常痛苦的批准过程。 我已获得将openJDK的JDK 1.8放入计算机的许可。

由于openJDK不会释放整个安装的tar球,并且由于我没有sudo权限,因此我尝试通过下载java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64.rpmjava-1.8.0-openjdk-devel-1.8.0.172-13.b11.fc29.x86_64.rpm/local/apps/openJDK8并运行(来自/local/apps/openJDK8

rpm2cpio < java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64.rpm | cpio -i --make-directories
rpm2cpio < java-1.8.0-openjdk-devel-1.8.0.172-13.b11.fc29.x86_64.rpm | cpio -i --make-directories

由于某种原因,这似乎并没有完成完整的JDK安装(我想我一定会缺少一些依赖项)。 我发现缺少libjava.so,libjvm.so,jvm.cfg和服务器文件夹,因此我刚刚创建了一些指向包含它们的JRE安装的链接(从local/apps/openJDK8 ):

ln -s /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/lib/amd64/jvm.cfg usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64/lib/amd64/jvm.cfg
ln -s /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/lib/amd64/libjava.so usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64/lib/amd64/libjava.so
ln -s /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/lib/amd64/libjvm.so usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64/lib/amd64/libjvm.so
ln -s /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/lib/amd64/server usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64/lib/amd64/server

这一步让我有些紧张,所以这可能是我的问题的一部分。 无论如何,javac和java似乎都能正常工作。

蚂蚁安装

对于我的ant安装,我只是下载了一个tar球并将其解压缩到/local/apps/ant ,然后执行了以下操作:

export JAVA_HOME=/local/apps/openJDK8/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64
export ANT_HOME=/local/apps/ant/apache-ant-1.10.4

我没有费心更新路径,因为现在我只是对所有内容使用完全限定的路径。 我的最终目标是让詹金斯无论如何都要运行所有这些,并且它仅使用完全限定的路径。

结果

现在,如果我尝试运行蚂蚁,我会得到:

> /local/apps/ant/apache-ant-1.10.4/bin/ant
Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/lib/tools.jar
Buildfile: build.xml does not exist!
Build failed

当然不希望build.xml does not exist ,但是需要解决无法找到tools.jar问题。 对我来说,最奇怪的部分是根据错误消息,它实际上是在JRE安装位置中寻找它。

由于ant本身只是一个shell脚本,因此我对其进行了修改,以通过在文件末尾添加以下几行来打印出更多信息:

echo Running $ant_exec_command $ant_exec_args
echo JAVA_HOME = $JAVA_HOME
echo JAVACMD = $JAVACMD
echo CLASSPATH = $CLASSPATH
echo LOCALCLASSPATH = $LOCALCLASSPATH
echo ANT_HOME = $ANT_HOME
echo ANT_LIB = $ANT_LIB
eval "$ant_exec_command $ant_exec_args"

现在的输出是:

$ /local/apps/ant/apache-ant-1.10.4/bin/ant
JAVA_HOME is /local/apps/openJDK8/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64
Running exec "$JAVACMD" -classpath "$LOCALCLASSPATH" -Dant.home="$ANT_HOME" -Dant.library.dir="$ANT_LIB" org.apache.tools.ant.launch.Launcher -cp "$CLASSPATH"
JAVA_HOME = /local/apps/openJDK8/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64
JAVACMD = /local/apps/openJDK8/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64/bin/java
CLASSPATH =
LOCALCLASSPATH = /local/apps/ant/apache-ant-1.10.4/lib/ant-launcher.jar
ANT_HOME = /local/apps/ant/apache-ant-1.10.4
ANT_LIB = /local/apps/ant/apache-ant-1.10.4/lib
Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/lib/tools.jar
Buildfile: build.xml does not exist!
Build failed

因此, JAVA_HOME已明确设置。 我什至可以进一步验证ant实际上至少在某些方面使用了我设置的JAVA_HOME值,因为如果删除在JDK安装中创建的所有那些链接,它会抱怨找不到libjava.so

因此,显然ant至少会使用我的JDK安装,但仍会在旧的JRE安装中寻找tools.jar

有什么想法吗?

弄清楚了 :)

与实际的修补程序相比,此修补程序仍然感觉更像是一种解决方法,因此,如果其他人有更好的解决方案,我很想听听。

我浏览了一下ant源代码,发现ant具有--launchdiag属性,这很有帮助。 跑那给了我:

/local/apps/openJDK8/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-13.b11.fc29.x86_64/bin/java -classpath /local/apps/ant/apache-ant-1.10.4/lib/ant-launcher.jar -Dant.home=/local/apps/ant/apache-ant-1.10.4 -Dant.library.dir=/local/apps/ant/apache-ant-1.10.4/lib org.apache.tools.ant.launch.Launcher --launchdiag
Launcher JAR= "/local/apps/ant/apache-ant-1.10.4/lib/ant-launcher.jar"
Launcher JAR directory= "/local/apps/ant/apache-ant-1.10.4/lib"
java.home= "/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/jre"
Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64/lib/tools.jar
tools.jar= "null"
Setting "java.class.path" to "/local/apps/ant/apache-ant-1.10.4/lib/ant-launcher.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-antlr.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-swing.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-testutil.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-apache-xalan2.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-junitlauncher.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-xz.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-junit.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-apache-log4j.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-javamail.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-apache-bsf.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-apache-resolver.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-apache-oro.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-apache-bcel.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-jai.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-jsch.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-jmf.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-commons-logging.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-launcher.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-jdepend.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-commons-net.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-netrexx.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-junit4.jar:/local/apps/ant/apache-ant-1.10.4/lib/ant-apache-regexp.jar"
Buildfile: build.xml does not exist!
Build failed

在代码中,我发现java.home属性来自System.getProperty("java.home") ,这显然与JAVA_HOME

通过添加-Djava.home=$JAVA_HOME我可以使它工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM