【问题标题】:How do I cure "Can't release project due to non released dependencies" when releasing a child module?发布子模块时如何解决“由于未发布的依赖项而无法发布项目”?
【发布时间】:2013-12-03 09:25:43
【问题描述】:

我正在使用 Maven 3.1.1 并尝试使用 Maven 发布插件来发布多模块项目的子模块。父模块已发布,并且此子模块不在父模块的子模块列表中。在我的子模块 pom.xml 文件中,我有

    <parent>
            <artifactId>subco</artifactId>
            <groupId>org.mainco.subco</groupId>
            <version>52.0.0-SNAPSHOT</version>
    </parent>
    <name>myproject</name>
    <url>http://maven.apache.org</url>

    <dependencyManagement>
            <dependencies>
                    <dependency>
                            <groupId>org.mainco.subco</groupId>
                            <artifactId>core</artifactId>
                            <version>${project.version}</version>
                    </dependency>
   </dependencyManagement>

    <dependencies>
            ...
            <dependency>
                    <groupId>org.mainco.subco</groupId>
                    <artifactId>core</artifactId>
            </dependency>

但是,当我运行以下内容时

mvn -B -DdevelopmentVersion=52.0.1-SNAPSHOT -DreleaseVersion=52.0.0 -Dusername=***** -Dtag=myproject-52.0.0 -DskipTests -P prod -Dresume=false -DdryRun=true -DallowTimestampedSnapshots=true org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare

我得到错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare (default-cli) on project myproject: Can't release project due to non released dependencies :
[ERROR] org.mainco.subco:core:jar:52.0.0-SNAPSHOT:compile
...
[ERROR] org.mainco.subco:subco:pom:52.0.0-SNAPSHOT

我无法更改父 pom.xml 文件中的任何属性……我可以在子模块中做些什么来使上述命令成功运行吗?我喜欢使用“${project.version}”,因为我不必在我的 pom.xml 中硬编码版本。另请注意,我正在使用被忽略的“-DallowTimestampedSnapshots=true”。

编辑:

甚至在 pom 中添加一个单独的版本元素,就像这样

    <parent>
            <artifactId>subco</artifactId>
            <groupId>org.mainco.subco</groupId>
            <version>52.0.0</version>
    </parent>

    <name>myproject</name>
    <url>http://maven.apache.org</url>
    <version>52.0.0-SNAPSHOT</version>

导致与上述相同的错误。

【问题讨论】:

  • 您使用的是最新版本的发布插件吗?

标签: maven dependencies snapshot release-management maven-release-plugin


【解决方案1】:

由于我依赖的子模块和父模块的版本相同,所以我改变了

${project.version}

${project.parent.version}

并使用编辑中的版本配置,错误消失了。

【讨论】:

    【解决方案2】:

    使用已发布的父版本。

    <parent>
        <artifactId>subco</artifactId>
        <groupId>org.mainco.subco</groupId>
        <version>52.0.0</version>
    </parent>
    

    您还需要指定当前项目的版本;由于它没有与父级一起发布,因此它需要有自己的版本元素。

    【讨论】:

    • 那行不通。这样做会导致错误“您在反应堆项目列表中没有 SNAPSHOT 项目”——我被告知你不能发布“发布”,因为它是——stackoverflow.com/questions/20054185/…
    • 注意,查看我的编辑,但添加您的建议(请确保我在上面发布的内容是您想要的),导致相同的错误 - “由于未发布的依赖项而无法发布项目"。
    【解决方案3】:

    对于那些来自谷歌搜索错误的人: 检查您的pom.xml 中是否有任何包含单词SNAPSHOT 的依赖项。 或者,如果您的项目版本具有 SNAPSHOT 并且您的一个或多个依赖项使用项目版本:

    <version>${project.version}</version>
    

    原因是 maven 根本不允许 mvn release:prepare 中的 SNAPSHOT 依赖项。

    您也可以使用选项-DignoreSnapshots=true,但请谨慎使用,并且只有在您知道自己在做什么的情况下,否则您最终会释放 SNAPSHOT 依赖项!!

    设置-DignoreSnapshots=true 后,mvn release:prepare 对它们很好,我可以在日志中看到:

    17:34:54 [INFO] Ignoring SNAPSHOT depenedencies and plugins ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2022-07-14
      • 1970-01-01
      相关资源
      最近更新 更多