【问题标题】:How can i ensure all my java projects in a git repository have latest or desired version of maven dependency?如何确保 git 存储库中的所有 java 项目都具有最新或所需版本的 maven 依赖项?
【发布时间】:2018-04-03 13:35:22
【问题描述】:

我有一个 git 存储库,其中包含大量 java 项目。其中一些是实用程序库,在其他项目中用作 maven 依赖项,其中一些是应用程序。

一段时间以来,发布了很多版本,但并非所有项目都升级为使用最新的依赖项,这造成了现在的操作问题。 那么,如果我有主数据,我怎样才能找出哪个项目正在使用旧版本的 maven 依赖项,它告诉我库的正确版本?

我遇到了一个 Java 库,JGit。我没有仔细研究它,但我在想,也许我可以提取主分支的 pom.xml 并对其进行检查。这会是一个正确的方法吗?还有其他/更好的方法吗?

【问题讨论】:

  • 谢谢大家。您的所有答案都很有帮助,因此我已将它们全部投票/选择为合适的答案。我正在研究最好的方法。我会及时通知你。

标签: java git maven


【解决方案1】:

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

因此,除非您有非常好的单元和集成测试,否则您不能认为这是一项自动化的任务。不过,您可以做什么:

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

【讨论】:

    【解决方案2】:

    这取决于您的“正确”版本是否也是最新的可用版本。如果是,那么 Maven 可以帮助您完成任务(请参阅versions-maven-plugin)。但是,您必须为每个项目重复此操作,假设它们不共享共同的父 POM。如果他们这样做了,您还可以在那里定义您的依赖管理并删除您的子 POM 中的任何显式版本。但是,这意味着您实际上是在项目中使用这些新版本,这可能不是您想要的。

    【讨论】:

      【解决方案3】:

      那么,我怎样才能找出哪个项目正在使用旧版本的 maven 依赖项,前提是我有主数据,它告诉我 图书馆的正确版本?

      计算有较新版本可用的依赖项:

      • 克隆存储库
      • 使用脚本或程序遍历本地存储库并过滤根目录下包含pom.xml 文件的文件夹,并对过滤后的文件夹执行versions:display-dependency-updates-mojo 目标并将所有结果汇总到一个文件/一些文件中。

      更新依赖:

      对要升级全部或部分依赖项的项目执行versions:use-latest-versions

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

      versions:display-dependency-updates

      显示所有具有较新版本的依赖项。它会 还显示插件使用或在 pluginManagement 中的插件。

      versions:use-latest-versions

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

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

      【讨论】:

        【解决方案4】:

        我理解你的困境。我创建了一个具有如下 POM 的独立 Maven 项目

        <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 控制版本。

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

        【讨论】:

          猜你喜欢
          • 2011-10-15
          • 2019-10-17
          • 1970-01-01
          • 2014-05-31
          • 2011-09-28
          • 2011-09-01
          • 2014-06-18
          • 2016-12-05
          • 1970-01-01
          相关资源
          最近更新 更多