在释放子模块时,如何解决“由于未释放的依赖项而无法释放项目”?

时间:2013-11-19 17:30:18

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

我正在使用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中硬编码版本。另请注意,我正在使用“-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>

导致与上述相同的错误。

3 个答案:

答案 0 :(得分:0)

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

${project.version}

${project.parent.version}

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

答案 1 :(得分:0)

对于那些通过搜索错误而来的人: 检查您的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 ...

答案 2 :(得分:-1)

使用已发布的父版本。

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

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