当前位置: 首页 > 知识库问答 >
问题:

Maven发布插件:创建带有SNAPSHOT依赖项的标签

翁和正
2023-03-14

我正在使用Maven发布插件,我正在尝试发布。当我在master上(我使用Git)时,我的项目(多模块)和依赖项(也是多模块)都有SNAPSHOT版本。

假设我想从没有使用快照的master创建一个标记(跳过创建分支)。

这是我的简化pom。xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: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>

<artifactId>results</artifactId>
<version>1.2-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Results parent module</name>

<modules>
    <module>results-web</module>
    <module>results-persistence</module>
    <module>results-domain</module>
    <module>results-logic</module>
    <module>results-logic-api</module>
    <module>results-ear</module>
    <module>results-configuration</module>
    <module>results-rules-ejb</module>
    <module>results-rules</module>
    <module>results-rest</module>
</modules>

<properties>
    <dependency1.version>1.2.3-SNAPSHOT</main.version>
    <dependency2.version>3.4.5-SNAPSHOT</main.version>
</properties>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <tagNameFormat>@{project.version}</tagNameFormat>
                    <autoVersionSubmodules>true</autoVersionSubmodules>
                    <localCheckout>true</localCheckout>
                    <pushChanges>false</pushChanges>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency1-domain</artifactId>
            <version>${dependency1.version}</version>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency1-enumerations</artifactId>
            <version>${dependency1.version}</version>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency1-logic</artifactId>
            <version>${dependency1.version}</version>
            <type>ejb</type>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency2-domain</artifactId>
            <version>${dependency2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency2-enumerations</artifactId>
            <version>${dependency2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency2-logic</artifactId>
            <version>${dependency2.version}</version>
            <type>ejb</type>
        </dependency>
    </dependencies>
</dependencyManagement>

如果我这样做:

mvn版本:prepare-Darguments=“-dependency1.version=1.2.3.0-Ddependency2.version=3.4.5.0”

这将创建一个仍然具有SNAPSHOT依赖项的分支:

<properties>
    <dependency1.version>1.2.3-SNAPSHOT</main.version>
    <dependency2.version>3.4.5-SNAPSHOT</main.version>
</properties>

如果上面的部分是:

<properties>
        <dependency1.version>1.2.3.0</main.version>
        <dependency2.version>3.4.5.0</main.version>
</properties>

共有2个答案

令狐昌胤
2023-03-14

发布插件不是为解决这个用例而设计的。

通过劫持和调用编辑pom的插件,您可能会有所进展。。。当然,这就是我在添加《完成目标》(completionGoals)时想到的用例

但目前,由于无法获得插件来编辑和取消编辑pom以设置版本,您将不得不接受手动编辑

时经纬
2023-03-14

发布插件不能更改POM中不属于反应器的依赖版本。

尝试Maven版本插件。您可以使用版本:使用版本将所有快照依赖项替换为相应的版本。如果要手动替换它们(可能是因为版本与快照不同),可以使用版本:set。但这两种方法都不适用于属性中提供的依赖项版本。对于属性版本:更新属性与设置allowSnapshots=false一起使用。如果不需要特殊的版本范围,此目标会自动实现,但也可以配置以处理此类需求。

您可以配置发布插件,使用preparaionGoals调用您的版本插件,如Stephen所述:<代码>

或者您在发布前手动调用版本插件,例如

mvn版本:use-释放scm:签入-Dmail="依赖项的发布版本"

 类似资料:
  • 问题内容: 我正在 Jenkins 内部使用M2发行插件,该 插件 内部调用了 maven-release-plugin 2.3.2 ,而在构建时抛出此错误: 。问题是,我的项目poms 的版本 确实 是1.0.0-SNAPSHOT。我想念什么? 是,而我只是为了 是的,我已经完成了基本的Google + SO拖网,并且到处都指出我的POM应该使用SNAPSHOT作为版本,而该版本已经存在。除了我

  • 我正在使用maven shade插件创建一个胖罐子,其中也包括一些弹性城堡罐子。但这造成了问题,因为Bouncy Castle的未签名版本。

  • 最近,我发现了以下问题: 当我为我的项目设置依赖项管理时,我有一个child-pom,它使用具有依赖项的插件,我想要与在我的依赖项管理中声明的依赖项同步。 在根pom中,我在依赖项管理中声明: 在子pom中,我有一个插件需要gwt-user: 但是,如果我移除gwt-maven-plugin中使用的依赖版本,编译就会失败。 是不是还有别的办法可以实现呢? PS:在maven和maven插件中有一个

  • 我正试图让maven下载所有的依赖项(编译、测试、插件等)。)这样我就可以避免让我们的dockerized构建浪费不必要的时间一遍又一遍地下载它们。 我们已经对maven build进行了dockerized,这样我们就可以从jenkins运行它,而无需在jenkins机器上安装大量构建特定的依赖项(Java、redis、maven依赖项等)。我们的构建依赖于增量docker构建,它只执行实际需要

  • 我正在使用weblogic maven插件在服务器上部署我的应用程序。 我不确定我是否在配置上犯了错误。今天的第一个maven构建需要很长时间(大约30分钟),因为插件似乎对完整的weblogic堆栈有大量的依赖,并更新了文件。 我的配置如下所示: 也许我们的Nexus-repo太慢了。;-) 提前感谢

  • 本文向大家介绍Apache Maven 创建具有项目所有依赖项的.jar文件,包括了Apache Maven 创建具有项目所有依赖项的.jar文件的使用技巧和注意事项,需要的朋友参考一下 示例 要创建包含所有依赖项的JAR,可以使用内置描述符格式jar-with-dependencies。以下示例package使用此内置描述符并声明的主类来配置绑定到该阶段的Assembly Plugin的执行co