我最近将项目中的maven-source-plugin版本从3.2.1升级到3.3.0,现在在构建过程中遇到以下错误:
无法在项目 xxx 上执行目标 org.apache.maven.plugins:maven-source-plugin:3.3.0:jar (attach-sources):大概您已将 maven-source-plugn 配置为在构建中执行两次。您必须至少为其中一个配置分类器。 -> [帮助1]
这个错误似乎与 maven-source-plugin 在 3.3.0 版本中更改了其行为以防止在构建过程中多次执行 Attach-sources 目标有关。但是,我找不到与此功能相关的任何可能导致此不兼容问题的文档或发行说明。
我想知道在哪里可以找到官方文档以及这个新功能的目的是什么?谢谢~
由于
3.3.0
,当在命令行上给出与源插件的jar-no-fork
目标绑定的多个生命周期阶段时,重复检查也会失败。例如
# mvn package install
# mvn install deploy
解决方案是简单地避免不必要的生命周期阶段:
# mvn install
# mvn deploy
但是,升级到
maven-sources-plugin
3.3.0 我认为会破坏相当多的构建。
从
3.2.1
升级到 3.3.0
后也遇到同样的问题。
将
goal
从jar
更改为jar-no-fork
后,错误已解决:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
值得注意的是,maven Super POM还包含一个配置文件
release-profile
,其中包含maven-source-plugin
:
<profiles>
<!-- NOTE: The release profile will be removed from future versions of the super POM -->
<profile>
<id>release-profile</id>
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<inherited>true</inherited>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
...
此配置文件在调用
mvn release:prepare
或 mvn release:perform
时执行
(也可以通过在 mvn 命令中添加 -DperformRelease=true 来手动激活以进行测试)
对我来说,问题是我的
maven-source-plugin
中的pluginManagement
也有一个用execution
指定的<goal>jar</goal>
。正如 harald-k (thx) 在上面的评论中指出的那样,这也被视为 maven-source-plugin
的“两次”执行。
因此,解决方案是在我的本地
<pluginManagement>
中指定,必须指定 maven-source-plugin
的版本,也作为 <goal>jar-no-fork</goal>
或在仅在版本中需要源时完全删除 <executions>
。
如果您在 pom 配置方面遇到困难并需要解决方法,您可以使用 '-Dmaven.source.skip' 跳过 maven-source-plugin(这将阻止“artifact-sources.jar”部署) mvn 命令中的参数。
mvn 帮助:描述 -Dplugin=org.apache.maven.plugins:maven-source-plugin
可用参数:
skipSource(默认:false)
用户属性:maven.source.skip 用于禁用源过程的标志。
这主要是为了 用于从命令行偶尔调整构建。
对于 2.4 及以下版本的“maven-source-plugin”,您应该使用“-Dsource.skip”。
对于 3.0.0 及更高版本,请改用“-Dmaven.source.skip”。
我昨天遇到了同样的问题,我解决了在我的 pom.xml 中添加这个问题:
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
</plugin>