从 3.2.1 升级到 3.3.0 后,Maven 构建失败

问题描述 投票:0回答:5

我最近将项目中的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 目标有关。但是,我找不到与此功能相关的任何可能导致此不兼容问题的文档或发行说明。

我想知道在哪里可以找到官方文档以及这个新功能的目的是什么?谢谢~

java maven maven-plugin
5个回答
12
投票

由于

3.3.0
,当在命令行上给出与源插件的
jar-no-fork
目标绑定的多个生命周期阶段时,重复检查也会失败。例如

# mvn package install
# mvn install deploy

解决方案是简单地避免不必要的生命周期阶段:

# mvn install
# mvn deploy

但是,升级到

maven-sources-plugin
3.3.0 我认为会破坏相当多的构建。


5
投票

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>

0
投票

值得注意的是,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>


-4
投票

如果您在 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”。


-6
投票

我昨天遇到了同样的问题,我解决了在我的 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>
© www.soinside.com 2019 - 2024. All rights reserved.