gpt4 book ai didi

java - 可执行Jar : Issue in accessing pom while executing jar

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:21 25 4
gpt4 key购买 nike

我正在尝试为我的 Maven-TestNG 项目创建一个可执行 jar。我的最终目标是仅通过 jar 文件在任何机器上执行代码。我的计划是将所有必需/依赖项 jar 文件放在一个文件夹中,并将该文件夹作为 -classpath 传递。

由于可执行 jar 需要一个 Main 类,因此我创建了一个主类并使用 InvocationRequest 执行目标。 。作为我目标的一部分,我的 TestNG.xml 将被执行。

InvocationRequest request = new DefaultInvocationRequest();
File file = new File("pom.xml");
File fileWithPath = new File(file.getAbsolutePath());

request.setPomFile(new File(fileWithPath));
request.setGoals(Collections.singletonList("clean verify"));

DefaultInvoker invoker = new DefaultInvoker();
invoker.setMavenHome(new File(System.getenv("M2_HOME")));
try {
invoker.execute(request);
} catch (MavenInvocationException e) {
e.printStackTrace();
}

当我从 Eclipse 执行上面的代码时,它工作正常。

但是一旦我进行打包并尝试使用 C:\TestProject 执行 Java -cp lib/* com.test.package.runner.InvokerClass ,它就会显示为 C:\TestProject\lib\pom.xml 未找到。我知道 pom.xml 不会出现在 jar 级别,而是位于 C:\TestProject\lib\TestProject.jar!\META-INF\maven\com.test.package\TestProject\pom.xml 下。

那么如何在运行时从 META-INF 文件夹中获取 pom.xml 的路径?

我尝试以不同的方式设置 pom.xml 路径,如下所示。但没有什么效果很好。请问有什么建议吗?

大多数时候,我都会遇到空指针异常,因为它找不到路径。

URL path = InvokerClass.class.getClass().getClassLoader().getResource("pom.xml");

URL path = InvokerClass.class.getClass().getClassLoader().getResource("./pom.xml");

URL path = InvokerClass.class.getClass().getClassLoader().getResource("META-INF/maven/com.adp.aca.test/aca-test-regression/pom.xml");

URL path = InvokerClass.class.getClass().getClassLoader().getResource("./META-INF/maven/com.adp.aca.test/aca-test-regression/pom.xml");

最佳答案

您可以在路径中使用 .. 来准备路径。它将为您提供您所在位置的父目录位置。

Updated

假设您的文件夹结构如下

C:/my-proj/java/Main.java
C:/my-proj/META-INF/pom.xml

然后如果你想找到pom.xml。您可以执行如下操作

String str = System.getProperty("user.dir");
System.out.println(str+"/../META-INF/pom.xml");

试试这个。

关于java - 可执行Jar : Issue in accessing pom while executing jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56934526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com