[英]Java POM plugin issue (Unable to parse configuration of mojo org.codehaus.mojo:exec-maven-plugin)
[英]Java Maven MOJO - getting information from project POM
我正在開發一個 Maven 插件。 我似乎很難弄清楚,從執行 MOJO 的項目中獲取 POM 信息的好方法是什么?
例如,如果我在另一個 Maven 項目中執行我的 mojo,我想獲取項目名稱或其他一些參數。
還有一件事,AbstractMojo.java 類中有一個上下文 MAP,有一個私有 Map pluginContext,如果我錯了,有人可以糾正我,但這應該用於在 mojo 之間傳遞信息嗎?
您可以使用如下聲明的字段將當前的 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>
@Component
private MavenProject project;
如果使用新的maven-plugin-annotations
也可以工作(更簡潔直觀),這是從maven-archetype-plugin
創建的新 mojo 的默認設置。
編輯(感謝@bmargulies):雖然@Component
Javadoc 自 3.2 起建議將其用於MavenProject
,但顯然已棄用並且該建議從 3.3 開始被刪除; maven-plugin-tools-annotations
建議的習語(從 3.3 開始)是這樣的(兩者似乎都有效):
@Parameter(defaultValue="${project}", readonly=true, required=true)
private MavenProject project;
現在首選的語法是:
@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>
(感謝已經提供此信息的其他人。這個答案將它們組合在一個地方。)
請參閱教程:如何創建 Maven 插件:
<dependency>
<!-- needed when injecting the Maven Project into a plugin -->
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.6.3</version>
<scope>provided</scope>
</dependency>
@Parameter(property = "project", readonly = true)
private MavenProject project;
maven-project
2.x 版本的maven-project
被 maven 3.x 版本中的 maven maven-model
替換,因此對於新項目,請使用
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.6.3</version>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.