1

我正在使用安装在/usr/java. 文件夹下的所有可执行文件bin都有-rwxr-xr-x权限。我将两者都ANT_HOME设置JAVA_HOME~/.bashrc

export ANT_HOME=/home/m/application/apache-ant-1.8.2
export JAVA_HOME=/usr/java/jdk1.7.0_13/

我有一个build.xml文件说:

<exec dir="${java.home}/bin/" executable="keytool"/>

但是在运行 ant 之后,我得到了这个异常:

/home/m/workspace/build.xml:58:执行失败:java.io.IOException:无法运行程序“keytool”(在目录“/usr/java/jdk1.7.0_13/jre/bin”中):错误= 2,在 org.apache.tools.ant.taskdefs.Execute$ 的 java.lang.Runtime.exec(Runtime.java:615) 的 java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 没有这样的文件或目录Java13CommandLauncher.exec(Execute.java:827) 在 org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:445) 。. .

在 org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

任何的想法?

4

2 回答 2

3

尝试:

  • export ANT_HOME=/path/to/ant

  • export PATH=$ANT_HOME/bin:$PATH

  • <exec executable="keytool"/>

或者:

<exec executable="${java.home}/bin/keytool"/>

由于该dir属性告诉 Ant 在哪个目录中执行二进制文件,而不是它的路径。

于 2013-02-11T16:10:59.370 回答
1

似乎何时JAVA_HOME在我的设置中~/.bashrc起作用,否则不起作用!

此外,在我的系统中搜索替代方案时,我发现该keytool命令甚至不在我的奴隶中!

这是我的运行日志alternatives --display java

java - status is manual.
 link currently points to /usr/java/latest/jre/bin/java
/usr/lib/jvm/jre-1.7.0-openjdk/bin/java - priority 170009
 slave keytool: /usr/lib/jvm/jre-1.7.0-openjdk/bin/keytool
 slave orbd: /usr/lib/jvm/jre-1.7.0-openjdk/bin/orbd
 slave pack200: /usr/lib/jvm/jre-1.7.0-openjdk/bin/pack200
 ...
 slave jre_exports: /usr/lib/jvm-exports/jre-1.7.0-openjdk
 slave jre: /usr/lib/jvm/jre-1.7.0-openjdk
 slave java.1.gz: /usr/share/man/man1/java-java-1.7.0-openjdk.1.gz
 slave keytool.1.gz: /usr/share/man/man1/keytool-java-1.7.0-openjdk.1.gz
 ...
/usr/java/latest/jre/bin/java - priority 20000
 slave keytool: (null)
 slave orbd: (null)
 slave pack200: (null)
 ...
Current `best' version is /usr/lib/jvm/jre-1.7.0-openjdk/bin/java.

所以我要求我的根jdk从替代方案中删除,直到我可以在需要时直接解决它$JAVA_HOME。幸运的是,问题解决了。

于 2013-02-11T16:48:24.673 回答