【发布时间】:2013-05-11 17:21:40
【问题描述】:
更新我将这个问题标记为关闭,因为似乎没有解决方案 - 插件根本没有表现出应有的行为,似乎没有人知道为什么。我最终编写了一个小程序来手动复制发布插件的所需行为,使用其他插件,如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
一切都按预期进行,包括更新为指向1.0.1-SNAPSHOT 的pom.xml 和在我的SCM 中创建的名为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 现在指向 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 存储库,但我没有。这会导致问题吗?
请注意,每当提交代码时,我使用 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 标签存在于目标/结帐文件夹中)。为什么要这样做?
更新 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. 对应于 maven-javadoc-plugin、maven-deploy-plugin 和 maven-source-plugin。我需要明确添加这些吗?
【问题讨论】: