簡體   English   中英

如何在不更新pom.xml的情況下在Maven Web項目中捆綁/打包自定義庫的最新版本?

[英]How to bundle/package latest version of custom library in maven web project without updating pom.xml?

我有一個自定義庫-Dao.jar,其中包含數據庫持久性邏輯。
每當代碼如下所示時,我都會將此罐子推送到新版本的工件中:

mvn install:install-file -Dfile=C:\*****\target\Dao.jar -DgroupId=non-public.com.karthik -DartifactId=dao -Dversion=2.0 -Dpackaging=jar

我有另一個Maven Web項目,它依賴於此jar。 這個jar也打包/捆綁在maven webapp項目/ war中。

<dependency>
    <groupId>non-public.com.karthik</groupId>
    <artifactId>dao</artifactId>
    <version>2.0</version>
</dependency>

當前,每當工件中有新版本的Dao.jar可用時,我都會在pom.xml中更改dao依賴項的版本,並重新構建maven webapp項目。
是否可以在不手動更改pom.xml中的依賴版本的情況下,使用最新版本的Dao.jar來構建Maven項目?

當Maven搜索依賴項時,它首先檢查本地存儲庫( 〜/ .m2 / repository )。 如果找不到,它將嘗試其他資源,例如POM文件或設置文件( 〜/ .m2 / settings.xml )中定義的遠程存儲庫。

按照這種邏輯,如果您嘗試使用尚未安裝到本地資源庫中的本地項目版本,則Maven將永遠無法找到要在另一個項目中使用的版本。

為避免始終更改版本號並手動構建兩個項目。 您可以為兩個項目都創建一個父POM。 然后,父級將能夠識別出其中一個子項目依賴於另一個,並以正確的順序構建它們。

根據Luciano的輸入,我創建了一個具有2個模塊(Dao和Web)的多模塊Maven項目/父POM。

父級

<groupId>com.karthik</groupId>
<artifactId>test</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>
        ..........
    </dependencies>
</dependencyManagement> 
<modules>
    <module>web</module>
    <module>dao</module>
</modules>

子模塊#1-dao

<parent>
    <groupId>com.karthik</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>
<artifactId>dao</artifactId>
<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>oracle</groupId>
        <artifactId>ojdbc6</artifactId>
    </dependency>
    .........   
  </dependencies>

子模塊2-Web(在POM中聲明為dao依賴性)

 <parent>
        <groupId>com.karthik</groupId>
        <artifactId>test</artifactId>
        <version>1.0-SNAPSHOT</version>
 </parent>
 <artifactId>web</artifactId>
 <packaging>war</packaging>
 <dependencies>
      <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
      </dependency>
      <dependency>
        <groupId>com.karthik</groupId>
        <artifactId>dao</artifactId>
        <version>1.0-SNAPSHOT</version>
      </dependency>
      ......... 
 </dependencies>

當我在父pom的根路徑上運行mvn package命令時,將同時構建兩個模塊-web.war和dao.jar。 此方法確保始終將最新版本的dao.jar打包在web.war中。

暫無
暫無

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

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