更新我将这个问题标记为关闭,因为似乎没有解决方案 - 插件根本没有表现出应有的行为,似乎没有人知道为什么。我最终编写了一个小程序来手动复制发布插件的所需行为,使用其他插件,例如scm
和versions
. 如果您想了解我是如何做到这一点的,请随时给我发电子邮件。
我最近将我的项目转移到了 Maven。但是,我在发布过程中遇到问题。
我的发布流程如下:
mvn scm:checkout -DconnectionUrl=scm:svn:https://my-server/svn/my-project/trunk -DcheckoutDirectory=my-project
cd my-project
mvn --batch-mode release:prepare
mvn release:perform
我开始1.0.0-SNAPSHOT
,我运行上面显示的发布程序。这会将我的 repo 更新为以下内容(按新度升序排列):
1.0.0-SNAPSHOT
1.0.0
1.0.1-SNAPSHOT
一切都按预期发生,包括pom.xml
更新的指向和在我的 SCM 中创建1.0.1-SNAPSHOT
的标记。my-project-1.0.0
但是,当我再次运行该过程时,我的仓库中会出现以下内容:
1.0.0-SNAPSHOT
1.0.1-SNAPSHOT
1.0.0
1.0.2-SNAPSHOT
也就是说,永远不会创建版本 1.0.1,而是将 1.0.1-SNAPSHOT 发布到 1.0.0。请注意,所有其他方面都按预期运行 - pom.xml
now 指向1.0.2-SNAPSHOT
并在我的 SCM 中创建了一个名为my-project-1.0.1
.
事实上,每次我运行发布过程时,SNAPSHOT 都会增加,但发布会写入 1.0.0,而从未创建过新发布。例如,再运行 3 次发布过程会导致以下结果:
1.0.0-SNAPSHOT
1.0.1-SNAPSHOT
1.0.2-SNAPSHOT
1.0.3-SNAPSHOT
1.0.4-SNAPSHOT
1.0.0
1.0.5-SNAPSHOT
上述预期行为是:
1.0.0-SNAPSHOT
1.0.0
1.0.1-SNAPSHOT
1.0.1
1.0.2-SNAPSHOT
1.0.2
1.0.3-SNAPSHOT
1.0.3
1.0.4-SNAPSHOT
1.0.4
1.0.5-SNAPSHOT
第pom.xml
一个版本如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" x mlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>my-project</artifactId>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>my-project</name>
<distributionManagement>
<repository>
<id>my-server</id>
<url>file://\\my-server\repo\</url>
</repository>
</distributionManagement>
<scm>
<developerConnection>scm:svn:https://my-server/svn/my-project</developerConnection>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.1</version>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>my-server</id>
<url>file://\\my-server\repo\</url>
</repository>
</repositories>
</project>
下面的答案之一表明我应该创建一个单独的release
和snapshot
repo,我没有。这会导致问题吗?
请注意,我使用 Jenkins 在mvn deploy
提交代码时自动调用。然而,这完全符合预期(即部署提交pom.xml
到 repo 中指定的任何版本)所以我怀疑这是问题的一部分。
非常感谢您的帮助。
更新
检查命令的输出,mvn release:perform
我看到以下内容:
Checking out the project to perform the release ...
Executing: cmd.exe /X /C "svn --non-interactive checkout https://my-server/svn/my-project/tags/my-project-1.0.2 c:\localrelease\mvn\my-project\target\checkout"
Working directory: c:\localrelease\mvn\my-project\target
Invoking perform goals in directory c:\localrelease\mvn\my-project\target\checkout\tags\my-project-1.0.0\trunk
Executing goals 'deploy'...
1.0.0
并且它每次都发布的原因是- 它检查更新的标签,但在旧1.0.0
标签上发布(即使1.0.1
标签存在于 target/checkout 文件夹中)。为什么要这样做?
更新 2
我已拆分为 2 个单独的存储库(一个用于快照,一个用于目标),但仍然存在此问题。
此外,在进一步调查日志时,我注意到了一些事情release:perform
:签出标签my-project-1.0.1
包含1.0.0
. 同样,标签的结帐1.0.2
包含标签1.0.0
和1.0.1
等。这是正确的行为吗?
也许发布过程总是在标签文件夹中查看它签出的任何内容并使用它找到的第一个,这将始终适用于除第一个版本之外的1.0.0
每个版本。
这似乎是一个非常奇怪的解释,但它是迄今为止我所看到的唯一一个行为。现在的问题是,我pom.xml
错误地配置了什么导致这种情况发生?
另一个注意事项:在执行发布时,部署目标会抱怨'build.plugins.plugin.version' for org.apache.maven.plugins:maven-xxxx-plugin is missing.
formaven-javadoc-plugin
和. 我需要明确添加这些吗?maven-deploy-plugin
maven-source-plugin