今天我在Maven 3中发现了一个奇怪的行为,同时准备发布(使用Maven发布插件)。由于描述往往相当长,我想在描述之前提出问题:
如何使用发布插件
要发布的工件是Maven插件本身(Mojo with Annotations)。在调用release:prepare目标时,它首先以交互模式启动进程,询问发布的新版本数据。之后,它会在一个应该发布的项目上执行“清理验证”的新进程。
如控制台输出所述,调用的执行顺序为
似乎插件:描述符无法找到任何Mojos,因为尚未进行编译:
[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>
插件执行的顺序更改为以下内容:
当找到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>