Как программно установить идентификатор артефакта и другую информацию, используя maven invoker - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь создать проект maven программным способом, запустив Java-приложение.В приложении я установил pom-файл следующим образом:

request.setPomFile(new File(thePomFile));
request.setGoals( Collections.singletonList( "archetype:generate" ) );

Это pom-файл с информацией об архетипе, который я хочу использовать, поскольку у меня есть собственная структура проекта.

Два вопроса:

  1. Я получаю сообщение об ошибке "Архетип не определен. Использование maven-archetype-quickstart (org.apache.maven.archetypes: maven-archetype-quickstart: 1.0)";почему, хотя я и предоставил pom-файл архетипа?
  2. Я также получаю "Свойство groupId [WARNING] отсутствует. Add -DgroupId = someValue [WARNING] Отсутствует свойство artifactId. Add -DartifactId = someValue [WARNING] Пакет свойств отсутствует. Add -Dpackage = someValue ";как мне предоставить эту информацию в запрос.Похоже, что API не имеет его.

Я попытался найти документацию по API и другие вопросы о стековом потоке, но не смог найти ничего похожего на это.Спасибо!

1 Ответ

0 голосов
/ 06 марта 2019

Я смог предоставить информацию в пункте 2, ответив в первую очередь на вопрос.

В самом запросе нужно сделать:

request.setGoals(Collections.singletonList("archetype:generate -DgroupId=.....");

Тогда есливы смотрите на api docs, есть конструктор командной строки, который я раньше не замечал: https://maven.apache.org/shared/maven-invoker/apidocs/index.html

MavenCommandLineBuilder mavenCmd = new MavenCommandLineBuilder();

Установите для этого mavenCmd необходимые конфигурации, такие как базовый каталог, путь к исполняемому файлу maven и т. д.

Затем вы можете отправить ему ранее созданный запрос, например:

Commandline result = mavenCmd.build(request); 

Чтобы ответить на мой первый вопрос, я закончил тем, что удалил сам параметр настройки pom, потому что извлекал его удаленно и упомянулархетип в команде, которую я отправил mavenCmd.Возможно, есть и лучший способ, но у меня это сработало, и у меня все хорошо.

...