我如何确保GIT存储库中的所有Java项目具有最新或期望的版本的Maven依赖性



我有一个包含大量Java项目的git存储库。其中一些是公用事业库,在其他项目中用作Maven依赖性,其中一些是应用程序。

在一段时间内,已经发布了许多版本,并且并非所有项目都已升级以使用最新的依赖性,该依赖性现在正在造成操作问题。因此,只要我有主数据,我该如何使用Maven依赖的旧版本来找出哪个项目,它告诉我库的正确版本?

我遇到了JGIT的Java图书馆。我还没有看很多东西,但是我在想,也许我将能够拔出主树枝的pom.xml并进行检查。这是正确的方法吗?还有其他/更好的方法吗?

更新项目的依赖项时,您需要构建和测试该项目。更新的依赖关系可能会破坏一些东西。

因此,除非您拥有非常好的单元和集成测试,否则您不能将其视为自动化的任务。但是,您可以做什么:

  • 查看一个项目。
  • 使用versions:use-latest-releases将所有依赖性替换为最新的依赖项。
  • 构建和测试项目。

取决于您的"正确"版本是否也是最新的可用版本。如果是,那么Maven可以帮助您执行任务(请参阅版本 - 马文 - plugin(。但是,假设他们没有共同的父母POM,则必须重复每个项目。如果他们这样做,您还可以在那里定义依赖关系管理,并删除孩子POMS中的任何明确版本。但是,这意味着您实际上在您的项目中使用了这些新版本,这可能不是您想要的。

所以,我该如何使用一个旧版本来找出一个项目 Maven依赖性,只要我有主数据,这告诉我 库的正确版本?

要计算具有较新版本的依赖项:

  • 克隆存储库
  • 使用脚本或程序在根a pom.xml文件上包含的本地存储库和过滤文件夹,并在过滤后的文件夹上执行versions:display-dependency-updates-mojo目标,并在文件/某些文件中汇总所有结果。

更新依赖项:

对于要升级所有或某些依赖项的项目,请执行versions:use-latest-versions

有关这些Maven目标的一些信息:

versions:display-dependency-updates

显示具有可用新版本的所有依赖关系。它会 还显示由插件使用或定义的依赖项 插件管理中的插件。

versions:use-latest-versions

用最新版本替换任何版本。

这些目标具有过滤依赖项以分析/更新的选项。

我了解您的困境。我创建了一个独立的Maven项目,该项目的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.etc</groupId>
<artifactId>dependency-management</artifactId>
<version>1.0.0</version>
<name>Maven dependency management</name>
<description>Hold version information for referenced artifacts</description>

<properties>
    <spring-boot.version>1.5.3.RELEASE</spring-boot.version>
    <java.version>1.8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.10.Final</version>
        </dependency>
    </dependencies>
    ... more dependencies
</dependencyManagement>

然后,我在其他Maven项目中参考该POM:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.etc</groupId>
            <artifactId>dependency-management</artifactId>
            <version>1.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>com.fusionalliance.internal.interview</groupId>
        <artifactId>shared-springboot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    </dependency>
</dependencies>
</project>

请注意,其他项目中不存在版本标签。依赖性管理POM控制版本。

您可以更新版本。(当然可以彻底测试所有内容。(

最新更新