我正在使用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>
导致与上述相同的错误。
答案 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>
您还需要指定当前项目的版本;因为它没有与父版本一起发布,所以它需要有自己的版本元素。