标签: maven-release-plugin

发布时的配置文件激活:准备和发布:执行

我无法找到激活某些Maven个人资料release:preparerelease: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在执行期间配置文件不活动.难道我做错了什么?

maven maven-release-plugin

13
推荐指数
3
解决办法
1万
查看次数

如何自定义Maven发布插件的标记格式?

在我们的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中似乎也是错误的.

默认情况下,如何确保标记正确?

tagging default release maven maven-release-plugin

12
推荐指数
1
解决办法
8574
查看次数

使用发行版+版本插件完全自动化发布过程

如果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结构如下: …

maven maven-release-plugin versions-maven-plugin

12
推荐指数
1
解决办法
2513
查看次数

Maven发布:批处理模式下的下一个开发版本

我已经配置了一个Jenkins作业来自动释放我的maven项目.这可以通过以下mvn --batch-mode clean release:prepare release:perform 方式完成:在批处理模式下,将自动确定发行版本和开发版本.这正是我想要的.

问题是我想增加第二个版本而不是第三个版本.因此,当我发布1.2.0版本时,下一个开发版本必须是1.3.0-SNAPSHOT.不是1.2.1-SNAPSHOT.添加命令行参数不是一个选项,因为这会强制我不断编辑构建作业.

有关如何更改用于确定下一个开发版本的算法的任何建议?

maven maven-release-plugin

12
推荐指数
2
解决办法
8556
查看次数

将参数传递给Maven发布版本

我正在尝试使用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)

java maven maven-release-plugin jenkins

12
推荐指数
2
解决办法
3万
查看次数

ArtifactId使用Maven Release Plugin附加到SCM Url

我有一个所有项目的主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标记复制到每个项目.

任何有助于解决此问题的帮助表示赞赏.

git bitbucket maven-release-plugin

11
推荐指数
1
解决办法
857
查看次数

Hudson和maven-release-plugin

我正在使用Hudson和maven-release-plugin.

正如你可能知道,行家释放小插件建立项目2个步骤:release:preparerelease:perform.

release:rollback如果release:perform失败,我应该如何配置Hudson执行?

java continuous-integration hudson maven maven-release-plugin

10
推荐指数
2
解决办法
4781
查看次数

Maven发布插件 - 需要SNAPSHOT项目

我正在使用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.defcompany parent POM,我正在做mvn releaseutils

<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不是快照.这可能是原因吗?

hudson maven maven-release-plugin jenkins

10
推荐指数
3
解决办法
2万
查看次数

maven发布插件和命令行参数

我正在尝试做一个非交互式的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-release-plugin

10
推荐指数
1
解决办法
6513
查看次数

创建多模块maven构建并独立发布单个模块?

我目前正致力于优化多模块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

9
推荐指数
1
解决办法
4428
查看次数