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

mvn command for updating version in dependency and one project that uses the dependency

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

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

我想我应该在将其工件存储在 Nexus 之前更新“核心”存储库的 POM 文件中的版本,这样其他存储库就不会下载包含我的更改的“核心”版本。我应该使用什么 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>

我不确定 <parent> 什么时候是一个有用的标签,但我注意到它没有被用来将应用程序存储库连接到“核心”存储库。

我想我想更新 POM

  1. 核心
  2. 并且对于使用核心的一个项目,而不是其他也使用核心的项目。

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

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

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

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

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

请注意,SNAPSHOT 版本用于开发。当你想发布一些东西时,创建一个发布版本,例如通过 Maven 发布插件。