API Maven-invoker не находит исполняемый файл maven, получая сообщение об ошибке Настройка командной строки - PullRequest
0 голосов
/ 12 декабря 2018

Я использую API maven-invoker для вызова maven для получения артефактов через координаты maven.По сути, это позволяет программно вызывать maven для файла pom, который вы создаете / создаете.Одним из требований этого API является наличие набора MAVEN_HOME, либо вы его явно указали, либо он будет искать значение M2_HOME на вашей локальной машине.

Здесь начинается сложная часть.

Я хочу использовать эту функцию независимо от того, установлен ли кто-либо на maven или установлена ​​переменная M2_HOME.Поэтому я встроил apache-maven-3.6.0 в ресурсы проекта и собрал проект с ресурсами.

Этот инструмент отлично работает, если на локальном компьютере установлена ​​переменная M2_HOME.

Но я получаю эту ошибку, когда пытаюсь запустить этот исполняемый файл JAR из командной строки, где M2_HOME не был настроен ранее:

Error configuring command-line. Reason: Maven executable not found at: /Users/haddad/Desktop/file:/Users/haddad/Desktop/exe-tool.jar!/apache-maven-3.6.0/bin/mvn

Когда я распаковываю исполняемый файл JAR (exe-tool).jar / apache-maven-3.6.0 / bin / mvn) mvn действительно существует и имеет разрешение на выполнение.Хотя я не уверен, для чего нужны символы !, и я подумал, что java выражает пути к файлам следующим образом file://, а не file:/

Я что-то упустил здесь?

Я установил M2_HOME, но не могу понять, что происходит со мной.Вот как я настраиваю Maven дома и даже исполняемый файл для Maven:

final String maven_home = MavenRunner.class
        .getClassLoader().getResource("apache-maven-3.6.0").getPath();
System.setProperty("M2_HOME", maven_home);

String m2Home = System.getProperty("M2_HOME");
File mavenExecutable = new File(m2Home +"/bin/mvn");

InvocationRequest request = new DefaultInvocationRequest();

request.setProperties(properties);
request.setPomFile( new File("/path/to/constructed/pom.xml") );
request.setGoals(Arrays.asList("clean", "install"));

Invoker invoker = new DefaultInvoker();
invoker.setMavenHome(new File(m2Home));

if (mavenExecutable.isFile() && mavenExecutable.canExecute()) {
    invoker.setMavenExecutable(mavenExecutable);
}

invoker.execute(request);

Как исправить эту ошибку?Как правильно настроить M2_HOME для чтения из встроенной установки maven, которую я включил в ресурсы проекта?

Я не знаю, что вызывает это сообщение об ошибке, любая помощь или указатели были бы очень благодарны.

...