Подтвердить что ты не робот

Java Maven MOJO - получение информации из проекта POM

Я работаю над плагином maven. Кажется, мне сложно понять, что было бы хорошим способом получить информацию POM от проекта, в котором вы выполняете MOJO?

Например, если я выполняю мой mojo в другом проекте maven, я хотел бы получить имя проекта или некоторые другие параметры.

И еще одна вещь: есть контекстный MAP в классе AbstractMojo.java, есть приватная Map pluginContext, может кто-то исправить меня, если я ошибаюсь, но это предполагается использовать для передачи информации между mojos?

4b9b3361

Ответ 1

Вы можете ввести текущий проект maven в свой mojo с полем, объявленным следующим образом:

/**
 * @parameter default-value="${project}"
 * @required
 * @readonly
 */
MavenProject project;

Затем имя проекта можно просто вызвать project.getName(). Чтобы использовать этот API, вам нужно добавить артефакт maven-project в качестве зависимости:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-project</artifactId>
    <version>2.0.6</version>
</dependency>

Ответ 2

@Component
private MavenProject project;

также работает (более лаконично и интуитивно) при использовании нового maven-plugin-annotations, который по умолчанию используется для новых mojos, созданных из maven-archetype-plugin.

РЕДАКТИРОВАТЬ (спасибо @bmargulies): хотя @Component Javadoc с 3.2 предлагает использовать его для MavenProject, по-видимому, он устарел и предложение отклонено с 3.3; идиома, предложенная maven-plugin-tools-annotations (начиная с 3.3), является чем-то вроде этого (оба, похоже, работают):

@Parameter(defaultValue="${project}", readonly=true, required=true)
private MavenProject project;

Ответ 3

Предпочитаемый синтаксис теперь:

@Parameter(defaultValue = "${project}", required = true, readonly = true)
MavenProject project;

Вам нужно добавить зависимость для maven-project к вашему плагину pom:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-project</artifactId>
    <version>2.0.6</version>
</dependency>

(Спасибо другим, которые уже предоставили эту информацию. Этот ответ объединяет их в одном месте.)