error = 2,java.lang.ProcessBuilder.start中没有这样的文件或目录

时间:2013-02-11 15:54:55

标签: java linux ant

我正在使用/usr/java中安装的Fedora 18和JDK 1.7.13。 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”):error = 2,没有这样的文件或目录     在java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)at   java.lang.Runtime.exec(Runtime.java:615)at   org.apache.tools.ant.taskdefs.Execute $ Java13CommandLauncher.exec(Execute.java:827)     在org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:445)。 。   

     

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

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

尝试:

  • export ANT_HOME=/path/to/ant

  • export PATH=$ANT_HOME/bin:$PATH

  • <exec executable="keytool"/>

或:

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

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

答案 1 :(得分:1)

似乎JAVA_HOME设置~/.bashrc时,它可以正常工作,否则就不行了!

在我的系统搜索alternative时,我发现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.

所以我请求我的root将jdk从替代品中移除,直到$JAVA_HOME可以在需要时直接解决它。幸运的是,问题解决了。