1

所以希望标题涵盖了 jist,我知道围绕这种事情有多个帖子,我特别遇到的问题是如何为我当前正在运行的包含该类的 jar 设置类路径。

即,我使用 Maven 程序集插件打包了我的 jar,其中所有依赖项都在其中爆炸。所以我只是想创建一个子进程来执行我的 jar 中存在的依赖类之一,从我的 jar 中。如果那可能?

感谢下面的帖子,这是解决方案:

URL baseUrl = getClass().getProtectionDomain().getCodeSource().getLocation();
                String myPath = (new File(baseUrl.toURI())).getCanonicalPath();

ProcessBuilder pb = new ProcessBuilder("javaw", "-cp", myPath,
 "jp.vmi.selenium.selenese.Main", config.getSuite().getAbsolutePath());

pb.redirectErrorStream(true);

try
{
    Process proc = pb.start();

    InputStream is = proc.getInputStream();
    BufferedInputStream bis = new BufferedInputStream(is);

    int c;

    while ((c = bis.read()) != -1)
    {
        System.out.write(c);
    }

    int exit = proc.waitFor();

任何指向正确方向的指针将不胜感激。

谢谢,

4

1 回答 1

1

好的,如果你绝对必须,你可以试试这个片段来找到你的“当前”JAR:

try
    {
        URL baseUrl = JavaApplication2.class.getProtectionDomain().getCodeSource().getLocation();
        String myPath = (new File(baseUrl.toURI())).getCanonicalPath();
        System.out.println("Path is " + myPath);
    }
    catch (IOException ex)
    {
       // Deal with exception 
    }
    catch (URISyntaxException ex)
    {
       // Deal with exception 
    }

使用应用程序/JAR 中的任何类代替“JavaApplication2”。(或者只是 getClass(),也应该在非静态上下文中工作)

于 2013-04-16T15:59:35.697 回答