mvn 命令用于更新依赖项中的版本和一个使用该依赖项的项目

Posted

技术标签:

【中文标题】mvn 命令用于更新依赖项中的版本和一个使用该依赖项的项目【英文标题】:mvn command for updating version in dependency and one project that uses the dependency 【发布时间】:2020-11-28 17:01:33 【问题描述】:

我正在尝试找出在 POM 文件中更新版本的最佳实践,该文件已被其他几个 Java 项目使用。我是 Java 和 Maven 的新手,但不是 OOP 和 semver。

我使用 maven 构建系统接管了一些带有 Java 代码的 git 存储库。我需要向其他几个存储库使用的“核心”存储库添加新功能,即使我只需要其中一个存储库即可从新功能中受益。我的希望是保持其他存储库不变。如果其他 repos 被某些 devops 进程重新部署,我希望他们使用“core”的版本,而不需要对“core”添加任何更改。

我认为我应该先更新“核心”存储库的 POM 文件中的版本,然后再将其工件存储在 Nexus 中,这样其他存储库就不会下载包含我更改的“核心”版本。我应该使用什么mvn 命令?

现在,“核心”库声明其版本如下:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company.team</groupId>
    <artifactId>foo-core</artifactId>
    <version>1.0.4-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>foo-core</name>
    <url>http://maven.apache.org</url>

    <blah/>
    <blah/>

</project>

使用“核心”的项目的 POM 如下所示:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company.team</groupId>
    <artifactId>bar</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <description>Bar</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>


    <dependencies>
        <dependency>
            <groupId>com.company.team</groupId>
            <artifactId>foo-core</artifactId>
            <version>1.0.4-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

我不确定&lt;parent&gt; 何时是一个有用的标签,但我注意到它没有用于将应用程序存储库连接到“核心”存储库。

我想我想更新 POM

    为核心 对于使用核心的一个项目,而不是同样使用核心的其他项目。

我解释了这样一个事实,即版本-SNAPSHOT 被所有其他项目用于引用“核心”,以告诉我没有为“核心”创建“发布”,至少在当前版本中是这样。如果我想将我的功能的“核心”容器版本设为 1.0.5-SNAPSHOT,是否可以跳过发布 1.0.4 版本?

对于我想使用新版本的一个项目,我需要在“核心”存储库和存储库中执行哪些命令?我认为有些命令只是修改 POM,但其他​​命令会将构建发布到 Nexus。

或者我可以在 POM 中输入一个新数字并运行 mvn 命令以使用新版本将构建推送到 Nexus?如果我只是用文本编辑器更改值,我计划在“core”的递增版本中留下单词-SNAPSHOT,并在我想使用新功能的一个应用程序中留下对“core”的引用。然后我只需要将核心发布到 Nexus。

--- 更新 ---

我了解到这个命令会增加“核心”中的版本号。这似乎不必要地复杂,因为您仍然需要在 CLI 提示时输入完整版本值(我输入了“1.0.5-SNAPSHOT”)。

mvn versions:set nestSnapshot

我猜这就是你更新应用程序以使用最新版本的依赖项的方式,但我认为它只有在你成功使用 mvn deploy 发布依赖项时才有效。

mvn versions:use-latest-releases -Dincludes=com.company.team:foo-core -DallowSnapshots=true

【问题讨论】:

【参考方案1】:

您可以直接转到您提到的两个 POM 文件并更改文件中的版本号。

我会先更改核心版本,然后运行构建mvn clean install(如果在您的本地计算机上完成)或mvn clean deploy(如果您想将其发送到您的公司存储库),然后更改版本其他项目中的核心数。

请注意,SNAPSHOT 版本用于开发。当您想发布某些内容时,请创建发布版本,例如通过 Maven 发布插件。

【讨论】:

谢谢!这比我在 maven.apache.org 上阅读的内容更有意义。我一定是缺少对 Nexus 的写入权限,因为 mvn deploy 没有成功,这使得我的应用无法使用 mvn versions:use-latest-releases -DallowSnapshots=true 获取最新版本的核心。

以上是关于mvn 命令用于更新依赖项中的版本和一个使用该依赖项的项目的主要内容,如果未能解决你的问题,请参考以下文章

maven 构建参数和命令

为啥有时会跳过 maven 依赖项中的版本号?

依赖项中的 JUnit 版本错误

maven重新拉取依赖命令

gradle - 依赖项中的库重复

IDEA 导入Java项目,依赖maven依赖命令(解决IDEA导入Github项目目录灰色问题,无法运行)