Maven mvn发布:执行失败,因为pom文件不在存储库的根目录下
我试图执行Maven mvn发布:执行失败,因为pom文件不在存储库的根目录下,maven,maven-release-plugin,maven-scm-plugin,Maven,Maven Release Plugin,Maven Scm Plugin,我试图执行mvn release:perform,但该命令假定pom文件位于存储库的根目录下。是否有可以设置为覆盖默认值的系统属性或首选项 调用mvn release:prepare似乎已经成功,因为所有发布工件都位于目标目录中,并且存储库已正确标记 如果有关系,这是一个git项目 编辑以下是我所做的: cd /path/to/git/root/path/to/mvn/project mvn -DdevelopmentVersion=1.2.0-SNAPSHOT -DreleaseVersio
mvn release:perform
,但该命令假定pom文件位于存储库的根目录下。是否有可以设置为覆盖默认值的系统属性或首选项
调用mvn release:prepare
似乎已经成功,因为所有发布工件都位于目标目录中,并且存储库已正确标记
如果有关系,这是一个git项目
编辑以下是我所做的:
cd /path/to/git/root/path/to/mvn/project
mvn -DdevelopmentVersion=1.2.0-SNAPSHOT -DreleaseVersion=1.1.0 release:prepare
...enter correct passphrase and choose all default options...
mvn release:perform
然后在target/checkout
目录中克隆远程repo,经过一些搅动和推送到远程git repo后,会发生以下错误:
[ERROR]
[ERROR] The project (/path/to/git/root/path/to/mvn/project/target/checkout/pom.xml) has 1 error
[ERROR] Non-readable POM /path/to/git/root/path/to/mvn/project/target/checkout/pom.xml: /path/to/git/root/path/to/mvn/project/target/checkout/pom.xml (No such file or directory)
因此,maven正在
目标/checkout
目录的根目录中查找pom文件,而该目录不在其所在位置。由于根pom实际上不在源代码管理中,我认为release:prepare和release:perform对您不起作用。我认为这些命令的目标之一是确保发布的项目可以基于源代码控制而不是个人机器上的内容构建(并通过测试)。这就是它尝试签出和重新构建的原因。如果pom根本不在源代码控制中,那么这个目标就不可能实现。您可能需要手动执行以下步骤:发布:准备和发布:执行:删除快照、提交、标记、mvn部署、增量版本添加快照、提交。我也遇到了同样的问题。将此添加到您的pom中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>perform</goal>
</goals>
<configuration>
<pomFileName>subdir/pom.xml</pomFileName>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
否。Maven假定pom位于当前工作目录中,并且是项目的根目录。它并不假定pom位于存储库的根。一个常见的布局(在Subversion中)是/trunk/ProjectName/pom.xml。发布:在那里准备工作。你能详细说明一下你在发布执行中遇到的问题吗?只是好奇,pom.xml在哪里,它是否可以在所有其他任务中自动找到,例如“mvn安装”、“mvn编译”?通常,您可以使用“mvn-f dir1/dir2/pom.xml”来使用另一个pom.xml,尽管我从未在发布插件中尝试过它。@Keith pom位于git repo根目录下2级。我总是从项目根目录(而不是git根目录)启动命令,因此所有其他mvn命令对我都有效,我不需要使用-f选项。@Keith,你不应该发布你的最后一条评论作为答案吗?最后,我放弃了,只运行了mvn deploy
。这是可行的,并且不依赖maven的魔力(ie-maven没有做任何自动标记和推送,这会混淆我们的CI系统)。当这个项目在svn下运行时,我已经完成了这一切,但是现在我无法在git下运行它。我想你误解了我上面的评论。pom受源代码控制。它只是不在源代码管理的根目录中。@Andrew,Git在提交时没有“子目录”的概念,因此您的场景在Git+maven发布插件方面是不可行的。插件必须提交/标记整个(Git)项目,但不能这样做。KISS的总体设计是1:1 Git项目:构建工件。也就是说,Maven子模块可以工作,但您必须在父模块及其所有子模块上运行Maven release插件。谢谢。看起来很有希望。正如我所说,我不再使用发布插件。而是使用部署目标。不过,我会试试这个,看看是否有效。