我无法找到激活某些Maven个人资料release:prepare和release:perform(两个)目标的解决方案.像这样的东西:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<useReleaseProfile>false</useReleaseProfile>
<goals>deploy</goals>
<arguments>-Pmy-release</arguments>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
只是不起作用.我知道这个releaseProfiles设置只适用于release:perform我,因为我只是arguments设置正是我想要的,但是my-profile在执行期间配置文件不活动.难道我做错了什么?
在我们的SVN仓库中,我们存储这样的标签:
trunk
project_a
project_b
branches
project_a
branch_x
branch_y
project_b
tags
project_a
1.0
1.1
project_b
1.0
Run Code Online (Sandbox Code Playgroud)
当我在项目A上运行Maven发布插件的" 准备 "目标时,默认情况下它会将标记创建为"tags/project_a-xx",这与我上面的标记命名方案不匹配.因此,我依赖于发布的任何人(即一个易犯错的人)来发现这一点并将标签更改为"tags/project_a/xx".如何告诉发布插件默认使用正确的格式?
"准备"目标有一个" 标签 "配置选项,声称这样做,但如果我设置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
<configuration>
<tag>${project.artifactId}/${project.version}</tag>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
...然后创建的标签是"tags/project_a/xx-SNAPSHOT",即它使用预发行版本号而不是发行版本号.将标签名称硬编码到POM中似乎也是错误的.
默认情况下,如何确保标记正确?
如果Maven大师社区可以帮助我完成以下任务,那将是很棒的.
我想以一种方式自动化Hudson中Maven模块的发布过程,即发布过程以批处理模式运行(不需要从控制台询问任何内容).目前我使用常见步骤release:prepare(<preparationGoals>versions:update-parent clean verify</preparationGoals>在提交之前将父更新到最新版本)+ release:perform.不过我希望Maven能够做到以下几点:
有些人在准备步骤中:
groupId与当前模块和父模块匹配的所有依赖项,请替换-SNAPSHOT为已发布的版本(例如versions:use-releases -Dincludes=???).发布后的一些内容:
groupId与当前模块和父模块匹配的所有依赖项,将版本替换为-SNAPSHOT版本(例如versions:use-latest-snapshots ...).例:
<parent>
<groupId>org.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myproject-api</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在标记模块之前转换为:
<parent>
<groupId>org.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.0</version>
</parent>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myproject-api</artifactId>
<version>1.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在发布成功后转化为:
<parent>
<groupId>org.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.1-SNAPSHOT</version>
</parent>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>myproject-api</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我觉得它需要混合使用
versions:use-releases scm:commit release:prepare release:perform versions:use-latest-snapshots scm:commit
但我不确定这样做的最佳方法是什么.特别是尽可能减少提交是很好的:难度是reparationGoals在-SNAPSHOT版本检查后运行.
在某种意义上,所描述的项目不是一个多模块项目,因为父POM没有通过它来引用它的子项<modules>.SCM结构如下: …
我已经配置了一个Jenkins作业来自动释放我的maven项目.这可以通过以下mvn --batch-mode clean release:prepare release:perform
方式完成:在批处理模式下,将自动确定发行版本和开发版本.这正是我想要的.
问题是我想增加第二个版本而不是第三个版本.因此,当我发布1.2.0版本时,下一个开发版本必须是1.3.0-SNAPSHOT.不是1.2.1-SNAPSHOT.添加命令行参数不是一个选项,因为这会强制我不断编辑构建作业.
有关如何更改用于确定下一个开发版本的算法的任何建议?
我正在尝试使用Maven发布一个库并执行一个站点部署到sourceforge(我先创建了一个交互式shell).该版本由Jenkins工作完成(使用Jenkins的Maven Release Plugin).
我试过了:
-X -e -Dresume=false -Dusername=puce release:prepare release:perform -Darguments="-Dusername=puce"
Run Code Online (Sandbox Code Playgroud)
和
-X -e -Dresume=false -Dusername=puce -Darguments=-Dusername=puce release:prepare release:perform
Run Code Online (Sandbox Code Playgroud)
但两次工作都挂在现场:部署第一个模块:
[INFO] --- maven-site-plugin:3.2:deploy (default-deploy) @ myproject-parent ---
[INFO] Parent project loaded from repository: myGroupId:myOtherproject-parent:pom:1.0
[INFO] Parent project loaded from repository: myGroupId:myOtherproject-parent:pom:1.0
Using private key: /opt/jenkins/.ssh/id_dsa
Run Code Online (Sandbox Code Playgroud)
当我停止工作时,最后会打印以下内容:
Password for ${username}@shell.sourceforge.net: channel stopped
Run Code Online (Sandbox Code Playgroud)
这可能意味着$ {username}未得到解决.
如何解析$ {username}?
编辑:
请注意,以下运行正常:
site-deploy -Psonatype-oss-release -Dusername=puce
Run Code Online (Sandbox Code Playgroud)
编辑2: 作为发布的一部分:执行maven执行以下命令:
/usr/share/maven/bin/mvn -s /tmp/release-settings7797889802430474959.xml deploy site-deploy --no-plugin-updates --batch-mode -Psonatype-oss-release -P nexus -f pom.xml
Run Code Online (Sandbox Code Playgroud)
-Dusername=puce 似乎没有传递给这个maven命令......
另请注意help:effective-pom显示以下maven-release-plugin配置:
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version> …Run Code Online (Sandbox Code Playgroud) 我有一个所有项目的主POM.POM包含以下SCM部分:
<groupId>com.company</groupId>
<artifactId>master</artifactId>
<version>...</version>
<packaging>pom</packaging>
<scm>
<connection>scm:git:https://user@bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</connection>
<developerConnection>scm:git:https://user@bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</developerConnection>
<url>https://bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</url>
<tag>HEAD</tag>
</scm>
<properties>
<project.scm.id>bitbucket-scm</project.scm.id>
<scm.project.name>maven-master</scm.project.name>
<scm.repository.name>tsu</scm.repository.name>
</properties>
Run Code Online (Sandbox Code Playgroud)
现在,我有一个maven多模块项目,这是父POM:
<parent>
<groupId>com.company</groupId>
<artifactId>master</artifactId>
<version>...</version>
</parent>
<groupId>com.company.group</groupId>
<artifactId>project-foo</artifactId>
<version>...</version>
<packaging>jar</packaging>
<name>project FOO</name>
<properties>
<scm.project.name>project-foo</scm.project.name>
</properties>
Run Code Online (Sandbox Code Playgroud)
执行发布插件以释放主POM(第一个片段)时,它工作正常.但是,当执行发布插件以释放多模块项目(第二个片段)时,它会失败,说:
[错误]无法执行目标org.apache.maven.plugins:maven-release-plugin:2.5.3:在project project-foo上准备(default-cli):无法提交文件[ERROR]提供者消息:[ERROR] git-push命令失败.[ERROR]命令输出:[ERROR]致命:远程错误:未找到存储库[错误]请求的存储库不存在,或者您没有[错误]访问它的权限.
在日志中,我还可以看到存储库URL.
对于Master POM的工作版本,它使用
https:// user:********@ bitbucket.server.de/scm/tsu/maven-master.git refs/heads/dev:refs/heads/dev
对于多模块项目的非工作版本,它使用
https:// user:********@ bitbucket.server.de/scm/tsu/project-foo.git/project-foo refs/heads/dev:refs/heads/dev
在发布多模块项目时,似乎将项目的工件ID附加到URL.
将整个SCM部分复制到多模块项目并进行修改时,它可以正常工作.但是,我只想在主POM中插入单个属性,以避免将SCM标记复制到每个项目.
任何有助于解决此问题的帮助表示赞赏.
我正在使用Hudson和maven-release-plugin.
正如你可能知道,行家释放小插件建立项目2个步骤:release:prepare话release:perform.
release:rollback如果release:perform失败,我应该如何配置Hudson执行?
java continuous-integration hudson maven maven-release-plugin
我正在使用Jenkins内部的M2发布插件,它在内部调用maven-release-plugin 2.3.2,同时构建抛出此错误:You don't have a SNAPSHOT project in the reactor projects list.问题是,我的项目劲歌做有自己的版本1.0.0快照.我错过了什么?
com.abc.def是company parent POM,我正在做mvn release的utils
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.abc</groupId>
<artifactId>def</artifactId>
<version>1.0.0</version>
</parent>
<groupId>com.abc.def</groupId>
<artifactId>utils</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>utils</name>
Run Code Online (Sandbox Code Playgroud)
是的,我已经完成了我的基本Google + SO拖网,而且它指出我的POM应该有SNAPSHOT作为版本,已经存在.除了我公司的父母POM不是快照.这可能是原因吗?
我正在尝试做一个非交互式的maven版本:
mvn clean install \
-PmyAssembly,attach-installer \
-DcustomerFlag=simple \
release:clean \
release:prepare \
release:perform \
-DreleaseVersion=1.0.1 \
-DdevelopmentVersion=1.0.2-SNAPSHOT \
-Dtag=my-project-1.0.1
Run Code Online (Sandbox Code Playgroud)
但是仅在运行-DcustomerFlag=simple时才运行该属性.performprepare
我需要指定所有命令行参数和配置文件两次,一次是for prepare还是一次perform?
或者,我想我可以跳过这perform一步,然后使用生成的标签中需要的参数进行常规构建/部署.
我目前正致力于优化多模块maven项目的maven构建.该项目由大约90个Maven模块组成.通常,有一些交叉的库构成了核心,然后大约有15个"应用程序模块"组成了整个应用程序(然后在WAR中部署)
现在一般情况下整个项目都有一个主要版本"2.5",因此当一个新的主要版本完成时,所有"应用程序模块"都具有相同的版本"2.5.0".到现在为止还挺好.
如果模块有需要修复或需要改进的错误,则应该发布该"应用程序模块"的新版本.因此,例如模块A修复了一个错误,然后A.jar应该是版本"2.5.1",而其余应该仍然是"2.5.0".
父(2.5.0-SNAPSHOT - 模块A(2.5.1-SNAPSHOT) - 模块B(2.5.0-SNAPSHOT) - 模块C(2.5.2-SNAPSHOT) - 战争(2.5.3-SNAPSHOT)< - 3最后,因为C有两个重新发布和一个,并且为了简单起见,在每个模块发布后发布.
我们决定在主pom中管理工件版本,因此我们不需要在释放一个模块后更新每个工件的依赖版本.
所以现在每当更新的"应用程序模块"准备就绪时,我们使用maven发布插件来执行该模块的发布(我们正在发布一个模块,而不是整个项目).因此,假设我们在版本2.5.4中发布模块A,导致A.jar被部署为版本2.5.4,并通过将模块代码更新为2.5.5-SNAPSHOT完成.
完成此操作后,我们需要更新主pom中的版本,以便所有模块继续引用正确的版本.
感谢主pom的dependencyManagement部分,如果我构建War模块,它会自动获取模块A的新版本.
现在是棘手的部分:一旦发布所有模块,就应该发布新版本的Web应用程序.这应该包含所有未更改的模块以及刚刚发布的模块.我目前正在努力如何做到这一点.如果我依赖父poms版本,该版本将包含SNAPSHOT版本(所有版本增量太高),我和发布插件不允许.
这种困境的最佳解决方案是什么?
我有一个想法是将依赖关系管理外包给一个单独的pom,然后使用"import"范围将其导入到主poms dependencyManagement中.
这种szenario是一个愚蠢的想法吗?是否有开发和维护这样的大型多模块应用程序的替代方案?简单地使用整个项目中的发布插件使所有版本同步并不是一个选项,因为应用程序很大并且客户端应用程序必须加载更新的模块版本.我们的一些客户的连接速度非常慢,因此每次推出所有模块都会让他们感到非常不满.
非常感谢,
克里斯
release release-management pom.xml maven maven-release-plugin