2

今天我在准备发布(使用 Maven 发布插件)时观察到 Maven 3 中的一个奇怪行为。由于描述往往相当长,我想在描述之前问一个问题:

如何实现使用发布插件

  • 以便构建分支以正确的顺序执行插件
  • 无需多次执行相同的插件#
  • 并为 Mojo 获取有效的 plugin.xml

要发布的工件是一个 Maven 插件本身(Mojo with Annotations)。调用 release:prepare 目标时,它首先以交互模式启动进程,请求发布的新版本数据。之后,它会派生一个新流程,对应该发布的项目进行“干净验证”。

如控制台输出所述,调用的执行顺序为

  1. 干净的
  2. 插件:描述符(Maven-插件-插件)
  3. 资源
  4. 编译
  5. 测试资源
  6. 测试编译
  7. 测试

似乎 plugin:descriptor 无法找到任何 Mojo,因为尚未进行编译:

[INFO] [INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ concordion-maven-plugin ---
[INFO] [WARNING] Using platform encoding (Cp1252 actually) to read mojo metadata, i.e. build is platform dependent!
[INFO] [INFO] Applying mojo extractor for language: java-annotations
[INFO] [INFO] Mojo extractor for language: java-annotations found 0 mojo descriptors.

当以正确的方式配置时,插件会因为找不到 mojo 而失败。

如果我将发布插件配置为使用显式调用编译目标

<preparationGoals>clean compile verify</preparationGoals>

插件执行顺序更改为:

  1. 干净的
  2. 插件:描述符(Maven-插件-插件)
  3. 资源
  4. 编译
  5. plugin:descriptor (这次是找到 Mojo 注释)
  6. 资源
  7. 编译
  8. 测试资源
  9. 测试编译
  10. 测试

找到 Mojo 后,将使用所有必要的数据创建 plugin.xml。

这是我的 pom 的整个构建部分。

<build>
    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <fork>false</fork>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>
                            descriptor
                        </goal>
                    </goals>
                    <phase>prepare-package</phase>
                </execution>
            </executions>
            <configuration>
                <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <dryRun>true</dryRun>
                <preparationGoals>clean compile verify</preparationGoals>
                <goals>deploy</goals>
            </configuration>
        </plugin>
    </plugins>
</build>
4

0 回答 0