我正在使用/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)
有什么想法吗?
答案 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
可以在需要时直接解决它。幸运的是,问题解决了。