【问题标题】:Drools; Unable to load pom.properties when executing on another machine流口水;在另一台机器上执行时无法加载 pom.properties
【发布时间】:2015-11-13 10:53:19
【问题描述】:

我正在尝试在另一台计算机上运行可执行 JAR 文件,但遇到“严重”错误:“无法从 MySoapUIProject-1.1.jar 加载 pom.properties,因为找不到 jarPath。”

如果我在具有此应用程序的 eclipse 项目的 PC 上执行 JAR,则不会产生下面链接的错误。

Error produced when executing JAR from Command Line on another computer

错误所指的 MySoapUIProject-1.1.jar 是我从 KieWorkbench 下载的工件 JAR 并将其打包到 Eclipse Drools 项目中。

我正在将 Workbench 工件作为我的应用程序中的默认 kiesession 加载,然后执行工件中包含的业务流程,如下所示:

public Person loadGuvnor(Person person) throws IOException{

    Person globalPerson = new Person();

    try 
    {
        KieServices kieServices = KieServices.Factory.get();
        KieRepository kieRepository = kieServices.getRepository();
        KieContainer kieContainer = kieServices.getKieClasspathContainer();
        KieSession myKieSession = kieContainer.newKieSession();

        myKieSession.insert(person);
        myKieSession.setGlobal("globalPerson", globalPerson);

        myKieSession.startProcess("MySoapUIProject.IDValidationProcess");
        myKieSession.fireAllRules();
        System.out.println("After Process Starts");

        globalPerson = (Person)myKieSession.getGlobal("globalPerson");

        System.out.println("Is the person a SACitizen?\t\t" + globalPerson.isSACitizen());
        System.out.println("Is the ID Valid?\t\t\t" + globalPerson.isValid());
        System.out.println("What is their Sequence Digits?\t\t" + globalPerson.getSequence());
        System.out.println("What is their DoB?\t\t\t" + globalPerson.getDateOfBirth().toString());
        System.out.println("What is their Age in Days this year?\t" + globalPerson.getAgeDays());
        System.out.println("What is their Age in Years?\t\t" + globalPerson.getAgeYears());
        System.out.println("what is their Gender?\t\t\t" + globalPerson.getGender());
        System.out.println("what is their Gender?\t\t\t" + globalPerson.getGenderText());

        return globalPerson;

    } catch (Exception e) 
    {
        e.printStackTrace();
    }

    return globalPerson;
}    

最终目标是拥有一个独立的 Java 应用程序,该应用程序将工作台工件存储在 jar 中,我想将存储在此 jar 中的 kmodule.xml 和 pom.properties 用于 KieContainer。

我了解到我遇到的这个错误可能是由于没有从默认目录启动应用程序造成的,但我已经尝试过,但它仍然会产生同样的错误。

我倾向于认为这可能是由于系统变量不存在而导致的,但我已经在另一台计算机上安装了 Maven,用于测试和 ant。还是没有运气。

我也尝试将项目导入测试计算机。我可以成功导入它并在 IDE 中运行项目而没有任何问题。但是然后我将它导出为一个可运行的 Jar,然后产生与上面相同的错误。

所以我的问题是:如何解决错误“无法从 MySoapUIProject-1.1.jar 加载 pom.properties,因为找不到 jarPath。”以便我的独立 java 应用程序可以在另一台计算机上运行?

【问题讨论】:

    标签: java jar drools drools-guvnor


    【解决方案1】:

    我认为这与类路径和打包管理比 Drools 更相关,正如我注意到您提到的那样:

    我可以成功导入并在 IDE 中运行项目而无需 任何问题。但是然后我将它导出为一个可运行的 Jar,然后同样 产生如上错误。

    关键点在export上。通常我使用 Maven 进行打包,因为我希望它能够管理 uberjar 或 shade 等。

    如果您使用 Eclipse 导出,我认为您可以尝试选择“将所需库复制到子文件夹 (...)”选项,然后确保在启动 jar 时列出所有必需的“库”jar进入类路径,例如:

    java -cp 'myJavaApp.jar:lib/*' your.package.MainClass
    

    java -cp 'myJavaApp.jar;lib/*' your.package.MainClass
    

    适用于 Windows。

    我认为您遇到的问题是您的 MySoapUIProject-1.1.jar 是手动添加到 Eclipse 类路径而不是通过适当的 maven 依赖项进行管理的,因此当您在 IDE 中时,可以在文件系统上以 .jar 文件的形式使用而当您“Eclipse 导出”时,您将其包装在另一个 jar 中。

    除了更多与 Drools 相关的说明,如果您有 KieWorkbench 和 repo,您​​可以避免手动操作,如上所述可能容易出错,只需按照 Drools documentation example 使用自动 Maven 解析,这似乎是最适合你的情况吗?

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多