【问题标题】:error=2, No such file or directory at java.lang.ProcessBuilder.start错误=2,在 java.lang.ProcessBuilder.start 中没有这样的文件或目录
【发布时间】:2013-02-11 15:54:54
【问题描述】:

我正在使用安装在/usr/java 中的 Fedora 18 和 JDK 1.7.13。 bin 文件夹下的所有可执行文件都有-rwxr-xr-x 权限。 我在~/.bashrc 中将ANT_HOMEJAVA_HOME 都设置为:

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) 在 java.lang.Runtime.exec(Runtime.java:615) 在 org.apache.tools.ant.taskdefs.Execute$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)

有什么想法吗?

【问题讨论】:

  • 嗯,你正在打开的 xml 文件的目录是 /usr/java/jdk1.7.0_13/bin/,但看起来 ant 正在查看 /usr/java/jdk1.7.0_13/jre/bin
  • 以详细模式运行 Ant ant -v ... 并检查 ls -al /usr/java/jdk1.7.0_13/jre/bin 以确保事情确实存在。
  • 你检查了,文件/usr/java/jdk1.7.0_13/jre/bin/keytool是否存在?
  • @Saggio:嗯,无论哪种方式,您在 JDK 和 JRE 的 bin 目录中都有 keytool。一定是别的东西。
  • @carlspring 我可以从 bash 运行 /usr/java/jdk1.7.0_13/jre/bin/keytool

标签: java linux ant


【解决方案1】:

试试:

  • export ANT_HOME=/path/to/ant

  • export PATH=$ANT_HOME/bin:$PATH

  • &lt;exec executable="keytool"/&gt;

或:

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

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

【讨论】:

  • 我试试看。当 JAVA_HOME 在我的 .bashrc 中设置时,它可以工作。否则不会!
  • 好吧,您需要定义 JAVA_HOME。
  • 难道dir=属性也需要定义吗?
【解决方案2】:

似乎在我的~/.bashrc 中设置JAVA_HOME 时有效,否则无效!

在我的系统中搜索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.

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

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 1970-01-01
    • 2020-05-01
    • 2019-12-12
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多