Я использую 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, которую я включил в ресурсы проекта?
Я не знаю, что вызывает это сообщение об ошибке, любая помощь или указатели были бы очень благодарны.