1

我正在制作一个 Web 应用程序,它在某个时刻启动一个新线程,并且该线程从命令行执行一个 jar 文件。从应用程序外部调用命令行 jar 时工作正常,但是当我从线程调用它时,相对路径变为 C:\eclipse\(我正在从 Eclipse 运行应用程序)而不是它存储的目录,这很混乱更新其配置,因为它在错误的位置查找文件。

jar 会创建一个日志文件,每当我尝试调用它时,我都会在日志中写入这一行:“10/04/2012 17:09:03 - java.io.FileNotFoundException: C:\eclipse\descriptors\analysis_engine\AggregateAE .xml" jar 不在 C:\eclipse 中。当我从提示符调用它时我没有问题,但是当它从一个新的衍生线程调用时我有这个错误。我已经在生产环境中尝试过,我遇到了同样的问题(这次基本路径是服务器的)

考虑到我无法修改所有路径,有什么办法可以解决这个问题?

编辑:这是调用 jar 的线程类

public class UimaThread extends Thread {
private int mode=0;
private String path;

public UimaThread(int mode, String path){
    this.mode=mode;
    this.path=path;
}

public void run() {
    Runtime run = Runtime.getRuntime();
    try {
        Properties config = ConfigLoader.getConfig();

        String uimaPath=config.getProperty("uimaPath")+ControlPanelUtils.getDelimiter(config.getProperty("uimaPath"));
//uimaPath is the absolute path to the jar file, mode and path are just arguments passed to the jar
        run.exec("java -jar "+uimaPath+"uimachainfull.jar "+mode+" "+path); 

    }

}

运行它的代码是:

public void startUima() throws IOException, ServletException {
    Properties config = ConfigLoader.getConfig();
    UimaThread uimaThread = new UimaThread(2, config.getProperty("docPath"));
    uimaThread.start();
}

我需要在服务器外部异步执行此操作,我在stackoverflow中询问了如何执行此操作,并且有人告诉我这样做:Calling an application from a web server asynchronously

4

1 回答 1

0

我发现了如何做到这一点,而不是使用 exec(String command) 我不得不使用 exec(String command, String[] envp, File dir) 并且最后一个参数 (dir) 是可以作为传递的工作目录新论点

于 2012-04-12T11:42:01.250 回答