Исполняемый файл Jar: проблема с доступом к pom при выполнении файла jar - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь создать исполняемый файл jar для моего проекта Maven-TestNG.Моя конечная цель - выполнить код на любой машине только с помощью jar-файлов.Мой план состоит в том, чтобы поместить все требуемые файлы JAR-файлов / зависимостей в папку и передать папку как -classpath.

Поскольку исполняемому файлу JAR нужен класс Main, я создал основной класс и выполнил поставленные задачи с помощью * 1003.* 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.

Но как только я выполнил упаковку и попытался выполнить Java -cp lib/* com.test.package.runner.InvokerClass из C:\TestProject с помощью команды, он показывает, что C:\TestProject\lib\pom.xml не найден.Я понял, что pom.xml не будет представлен на уровне jar. Вместо этого он будет находиться под C:\TestProject\lib\TestProject.jar!\META-INF\maven\com.test.package\TestProject\pom.xml.

Так как я могу получить путь к pom.xml из папки META-INF во время выполнения?

Я попытался установить путь к pom.xml по-разному, как показано ниже.Но ничего не получалось.Любые предложения, пожалуйста?

В большинстве случаев я получал исключение nullpointer, поскольку он не мог найти путь.

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");

1 Ответ

0 голосов
/ 08 июля 2019

Вы можете подготовить путь, используя .. в пути.Это даст вам местоположение родительского каталога, где вы находитесь.

Обновлено

Предположим, что ваша структура папок имеет вид

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");

Попробуйте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...