-->

程序无法在PATH通过Java运行在Mac OS X中发现(Program can't be

2019-07-20 16:04发布

我使用ImageMagick在Mac OS X(10.7)。 我的帮助下安装了它MacPorts

现在当我进入终端和写:

identify image.jpg

这是工作完全正常。

但现在,而从Java内部执行它,以下异常得到投掷:

org.im4java.core.CommandException: java.io.FileNotFoundException: identify

我可以看到它是在PATH通过运行:

which identify

与响应:

/opt/local/bin/identify

现在,运行时:

echo $PATH

我得到的回应:

/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

相同的代码工作完全在Windows在那里ImageMagick也被安装。

那么,为什么im4java没有找到identifyPATH呢?

Answer 1:

尝试搜索路径设置到目标目录:

import org.im4java.process.ProcessStarter;
ProcessStarter.setGlobalSearchPath("/opt/local/bin");


Answer 2:

喜欢它的描述这里OS X 10.8和这里的OS X 10.7的唯一完整的解决方案是设置PATH/etc/launchd.conf

每默认PATH为应用程序设置IST到/usr/bin:/bin:/usr/sbin:/sbin ,即使你没有 /etc/launchd.conf可言。

所以,你必须做到以下几点在你的终端:

sudo vi /etc/launchd.conf

并添加以下行或修改它,如果它已经存在:

setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

重要提示:现在,你需要重新启动你的Mac!

您可以复制你的PATH与下面的代码Java应用程序:

public class Main {
    public static void main (String[] args) {
        System.out.println("PATH=" + System.getenv().get("PATH"));
    }
}

还有第二个解决办法,如果你从一个IDE像Eclipse可以设置PATH有作为内开始你的计划。 在Eclipse中,你可以做,通过Run | Run Configurations | Environment Run | Run Configurations | Environment Run | Run Configurations | Environment而下的左侧边栏上选择启动配置Java Application

我做了下面的代码,并复制它image.jpg位于${user.dir}又名您的Java应用程序得到了来自推出的当前目录。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Main {
    public static void main (String[] args) {
        System.out.println("PATH=" + System.getenv().get("PATH"));
        try {
            Process exec = Runtime.getRuntime().exec("identify image.jpg");
            InputStream is = exec.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            System.out.println(br.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} 

运行上面的代码后,你应该得到类似的这样的输出:

PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
image.jpg JPEG 690x518 690x518+0+0 8-bit sRGB 152KB 0.000u 0:00.000

第一输出线显示您的PATH你现在运行Java应用程序。 第二输出线来自identify image.jpg

注:我正在运行的Mac OS X 10.8.2和2.1.3 MacPorts的


注意:有Mac OS X的10.8之前的方式来设置对用户群利用用户的全局变量~/.MacOSX/environment.plist 。 但是,这已不再工作了与山狮(又名的Mac OS X 10.8)开始。 详细信息可以在这里签出:

  • https://apple.stackexchange.com/questions/57385/where-are-system-environment-variables-set-in-mountain-lion


Answer 3:

我认为Java程序不是从shell启动,或作为其他用户(在后一种情况下,我的回答不会帮助)。 同样是真实为MacOS 10.8,这个方法行不通那里,乌韦指出(详见注释)。

当一个程序从别的比外壳的某处开始,像外壳配置脚本设置环境变量profilebashrc显然是不可用的。 要设置环境变量为这些应用程序,使用文件.MacOSX/environment.plist在你的主目录。 要创建该文件,则需要使用shell,然后用自带的Xcode属性列表编辑器中打开它,并设定PATH变量所需的值。 有关详细信息看看苹果的文档: Mac开发者库:用户会话环境变量

下面是一个内容的例子environment.plist文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>LSCOLORS</key>
        <string>gxfxcxdxbxegedabagacad</string>
        <key>PATH</key>
        <string>/usr/local/bin:/usr/local/sbin:/usr/X11/bin:/usr/local/share/python</string>
   </dict>
</plist>


文章来源: Program can't be found in PATH by Java Runtime on Mac OS X