簡體   English   中英

Java Maven MOJO - 從項目 POM 獲取信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM