簡體   English   中英

如何確保git存儲庫中的所有Java項目都具有最新或所需的maven依賴項版本?

[英]How can i ensure all my java projects in a git repository have latest or desired version of maven dependency?

我有一個包含大量java項目的git存儲庫。 其中一些是實用程序庫,在其他項目中用作maven依賴項,其中一些是應用程序。

在一段時間內,已經發布了許多版本,並且並非所有項目都已升級為使用最新的依賴項,這現在正在創建操作問題。 那么,如果我有主數據,我怎么能找出哪個項目正在使用舊版本的maven依賴項,它告訴我庫的正確版本?

我遇到了一個Java庫,JGit。 我沒有太多關注它,但我在想,也許我將能夠拔出主分支的pom.xml並對其進行檢查。 這是一個正確的方法嗎? 有沒有其他/更好的方法這樣做?

更新項目的依賴項時,需要構建並測試該項目。 更新的依賴項可能會破壞某些內容。

因此,除非您有非常好的單元和集成測試,否則您不能認為這是一項自動化任務。 但你能做什么呢:

  • 檢查一個項目。
  • 使用versions:use-latest-releases替換所有依賴項。
  • 構建並測試項目。

這取決於您的“正確”版本是否也是最新版本。 如果是,那么Maven可以幫助您完成任務(請參閱versions-maven-plugin )。 但是,假設它們沒有共享父POM,則必須為每個項目重復此操作。 如果他們這樣做,您還可以在那里定義依賴關系管理並刪除子POM中的任何顯式版本。 但是,這意味着您實際上在項目中使用這些新版本,這可能不是您想要的。

那么,如果我有主數據,我怎么能找出哪個項目正在使用舊版本的maven依賴項,它告訴我庫的正確版本?

要計算具有更新版本的依賴項:

  • 克隆存儲庫
  • 使用腳本或程序遍歷本地存儲庫並過濾包含在根目錄下的pom.xml文件的文件夾,並對已過濾的文件夾執行versions:display-dependency-updates-mojo目標,並將所有結果聚合在一個文件/某些文件中。

要更新依賴項:

執行versions:use-latest-versions用於要升級所有或某些依賴項的項目。

有關這些Maven目標的一些信息:

versions:display-dependency-updates

顯示具有較新版本的所有依賴項。 它還將顯示插件使用的插件或插件在插件管理中定義的依賴關系。

versions:use-latest-versions

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

這些目標具有篩選依賴關系以進行分析/更新的選項。

我理解你的困境。 我創建了一個具有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控制版本。

然后,您可以更新版本。 (當然,徹底測試一切。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM