更新我检举此问题被关闭,因为似乎没有解决 - 插件根本就没有表现,因为它应该,没有人似乎知道为什么。我已经结束了写一个小程序,手动复制发布插件自己的期望的行为,使用其他插件,如scm
和versions
。如果你想了解我是如何做到的,请随时给我发电子邮件。Maven的版本:执行覆盖首次发布,以后每发布
我最近把我的项目移到了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
,我运行上面所示的释放过程。这将更新我的回购以下(升序新奇):如预期,包括pom.xml
更新指向1.0.1-SNAPSHOT
和一个名为my-project-1.0.0
在我SCM创建标签时
1.0.0-SNAPSHOT
1.0.0
1.0.1-SNAPSHOT
一切。然而,当我再次运行程序,下面出现在我的回购:
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
创建一个标签。
事实上,我每次运行的释放过程中,快照增加,但释放被写入到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
回购,我却没有。这是否会导致问题?
请注意,我用的詹金斯每当代码致力于自动调用mvn deploy
。然而这也正是作为预期(取版本承诺pom.xml
被指定为回购协议,即部署),所以我怀疑这是问题的一部分。
非常感谢您的任何帮助。
更新
检查从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
。我需要明确添加这些吗?
谢谢你的回应。我可能在我的问题中解释得很差,但我确实了解应该发生的周期。也许这是由于不正确的设置(我今天将从一张干净的纸上进行测试),但问题似乎是'release:perform'总是写入1.0.1。目前我在1.0.7-SNAPSHOT上;当我运行释放过程时,它移动到1.0.8-SNAPSHOT,但随后'释放'到1.0.1,而不是1.0.7。每次我运行'release:perform'时,它都会覆盖第一个发行版。初始回购设置中的某些错误是否会导致此问题? –
我尝试了一个完全和新的项目(虽然仍然只有一个存储库),并再次出现同样的问题。从'1.0.0-SNAPSHOT'开始,我运行释放过程并将1.0.0发布到回购站,将标签'my-project-1.0.0'添加到SCM和'1.0.1-SNAPSHOT'在回购中创建(并且更新了poms)。当我再次运行释放过程时,将标记'my-project-1.0.1'添加到SCM,将'1.0.2-SNAPSHOT'添加到回购中,但释放'1.0.1'从不出现在回购中 - 相反'1.0.0'被覆盖。任何想法是什么造成这种情况?单个存储库是否是问题? –
这不可能。你可以把这个完整的项目推到Github上,或者在github上做一个主题,所以我可以看看它。 – khmarbaise