Java Maven版本:为每个后续版本执行覆盖第一个版本
更新我将此问题标记为关闭,因为似乎没有解决方案-插件的行为根本没有达到应有的水平,而且似乎没有人知道原因。最后,我自己编写了一个小程序来手动复制发布插件所需的行为,使用其他插件,如Java Maven版本:为每个后续版本执行覆盖第一个版本,java,maven,release,Java,Maven,Release,更新我将此问题标记为关闭,因为似乎没有解决方案-插件的行为根本没有达到应有的水平,而且似乎没有人知道原因。最后,我自己编写了一个小程序来手动复制发布插件所需的行为,使用其他插件,如scm和版本。如果你想知道我是如何做到这一点的,请随时给我发电子邮件 我最近把我的项目搬到了maven。但是,我在发布过程中遇到了问题 我的释放程序如下: mvn scm:checkout -DconnectionUrl=scm:svn:https://my-server/svn/my-project/trunk -
scm
和版本
。如果你想知道我是如何做到这一点的,请随时给我发电子邮件
我最近把我的项目搬到了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
开始,运行上面所示的发布过程。这将我的回购更新为以下内容(按新的升序):
一切按预期进行,包括更新为指向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
的标记
事实上,每次我运行发布过程时,快照都会增加,但该版本会写入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>
这就是它每次都发布到1.0.0
的原因-它签出更新的标记,但在旧的1.0.0
标记上发布(即使1.0.1
标记存在于目标/签出文件夹中)。为什么要这样做
更新2 我已拆分为两个独立的存储库(一个用于快照,一个用于目标),但此问题仍然存在 另外,我在调查
发布日志时注意到:执行进一步:标记my-project-1.0.1
的签出包含1.0.0
的标记。类似地,标记1.0.2
的签出包含标记1.0.0
和1.0.1
等。这种行为正确吗
也许发布过程总是在它签出的任何东西的tags文件夹中查找,并使用它找到的第一个,除了第一个版本之外,每个版本的tags文件夹总是1.0.0
这似乎是一个非常奇怪的解释,但这是迄今为止我对我所看到的行为的唯一解释。现在的问题是,我在pom.xml
中错误地配置了什么导致了这种情况的发生
另一个注意事项:在执行发布时,部署目标抱怨org.apache.maven.plugins:maven xxxx插件的'build.plugins.plugin.version'丢失。
对于maven javadoc插件
,maven部署插件
和maven源插件
。是否需要明确添加这些内容?首先,您使用的版本不正确:
检查最新代码(最新pom当前指向1.0.0)
创建新版本1.0.1-SNAPSHOT
将pom更新为指向1.0.1-SNAPSHOT并提交
通常的方法是从快照版本开始(也是第一个开发步骤),因为快照表示它正在开发中,即将发布
签出版本为1.0.0-SNAPSHOT的最新代码
将在SVN中创建标记1.0.0并创建新的pom()
创建新版本1.0.1-SNAPSHOT
之后,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'...
<distributionManagement>
<repository>
<id>releases</id>
<url>file:///C:/maven/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>file:///C:/maven/snapshots</url>
</snapshotRepository>
<site>
<id>site</id>
<url>file:///C:/maven/sites/${project.groupId}/${project.artifactId}/${project.version}</url>
</site>
</distributionManagement>
签出标记的版本1.0.0并将部署site deploy()
发布周期的下一个调用将从1.0.1-SNAPSHOT转到下一个开发周期的1.0.1版本和1.0.2-SNAPSHOT
除上述内容外,还应使用存储库管理器,如。如果是RepoMgmt,您有一个单独的快照存储库和版本存储库,可以随时清理快照存储库。您还可以使用文件访问进行设置,该设置应按照以下正确方式进行:
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'...
<distributionManagement>
<repository>
<id>releases</id>
<url>file:///C:/maven/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>file:///C:/maven/snapshots</url>
</snapshotRepository>
<site>
<id>site</id>
<url>file:///C:/maven/sites/${project.groupId}/${project.artifactId}/${project.version}</url>
</site>
</distributionManagement>
第一件事是,您从错误的版本开始:
检查最新代码(最新pom当前指向1.0.0)
创建新版本1.0.1-SNAPSHOT
将pom更新为指向1.0.1-SNAPSHOT并提交
通常的方法是从快照版本开始(也是第一个开发步骤),因为快照表示它正在开发中,即将发布
签出版本为1.0.0-SNAPSHOT的最新代码
将在SVN中创建标记1.0.0并创建新的pom()
创建新版本1.0.1-SNAPSHOT
之后,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'...
<distributionManagement>
<repository>
<id>releases</id>
<url>file:///C:/maven/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>file:///C:/maven/snapshots</url>
</snapshotRepository>
<site>
<id>site</id>
<url>file:///C:/maven/sites/${project.groupId}/${project.artifactId}/${project.version}</url>
</site>
</distributionManagement>
签出标记的版本1.0.0并将部署site deploy()
发布周期的下一个调用将从1.0.1-SNAPSHOT转到下一个开发周期的1.0.1版本和1.0.2-SNAPSHOT
除上述内容外,还应使用存储库管理器,如。如果是RepoMgmt,您有一个单独的快照存储库和版本存储库,可以随时清理快照存储库。您还可以使用文件访问进行设置,该设置应按照以下正确方式进行:
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'...
<distributionManagement>
<repository>
<id>releases</id>
<url>file:///C:/maven/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>file:///C:/maven/snapshots</url>
</snapshotRepository>
<site>
<id>site</id>
<url>file:///C:/maven/sites/${project.groupId}/${project.artifactId}/${project.version}</url>
</site>
</distributionManagement>
我遇到了完全相同的问题,结果发现问题出在SCMconnection
和developerConnection
配置上。我一直在使用标准的SVN布局(tunk、分支、标记),但我已经为我的repo的根目录提供了URL:
<scm>
<connection>scm:svn:file:///C:/var/svn/main</connection>
<developerConnection>scm:svn:file:///C:/var/svn/main</developerConnection>
</scm>
就这些。添加<