簡體   English   中英

如何在項目上下文之外包含maven模塊?

[英]How to include a maven module outside of the project context?

我想在某種全局項目目錄中有一個模塊,這樣我就可以將該模塊包含在使用該公共代碼的所有其他項目中。

但是,我怎么能告訴maven父pom包含並編譯這個全局共享模塊呢? 以下不起作用:

svn/MyGlobalProject/project-commons/pom.xml           //should be shared among different projects
svn/MyProject/web-parent/trunk/pom.xml                //the parent pom used to build the application
svn/MyProject/web-parent/trunk/project-domain/pom.xml //submodule 1
svn/MyProject/web-parent/trunk/project-web/pom.xml    //submodule 2

parent pom.xml:

<project>
        <groupId>de.project</groupId>
    <artifactId>project-parent</artifactId>
    <packaging>pom</packaging>

    <modules>
        <module>project-domain</module>
        <module>project-web</module>
        <module>../project-commons</module> <!-- Error -->
    </modules>
</project>

mvn package導致:

Child module trunk\project-commons of trunk\pom.xml does not exist

如果在該全局項目上運行mvn install ,它將安裝在本地存儲庫中。 然后,您的其他項目可以將其作為依賴項引用:

<dependency>
  <groupId>whatever</groupId>
  <artifactId>project-commons</artifactId>
  <version>1.0</version>
</dependency>

這種簡單方法的缺點是,在您檢出project-commons並運行mvn install之前,您的其他項目將無法編譯。

更高級的方法是部署可以部署全局工件的網絡可訪問存儲庫(例如Artifactory或Nexus)。 Artifactory有一個免費的社區版本。 然后,您可以在設置文件中列出此存儲庫,Maven將解析上傳到它的工件。

使用相對路徑來包含一些子模塊不是一個好習慣......你會遇到很多問題。

你不能把公共項目作為父模塊的依賴項......

通過這種方式,您將在所有子模塊中具有“公共項目”,將父項目聲明為父項...

為什么每次編譯父pom時都要編譯“常用”項目?

編輯:

你的SVN:

svn/MyGlobalProject/project-commons/pom.xml           //should be shared among different projects
svn/MyProject/web-parent/trunk/pom.xml                //the parent pom used to build the    application
svn/MyProject/web-parent/trunk/project-domain/pom.xml //submodule 1
svn/MyProject/web-parent/trunk/project-web/pom.xml    //submodule 2

父母POM.XML:

<project>
    <groupId>de.project</groupId>
    <artifactId>project-parent</artifactId>
    <packaging>pom</packaging>

    <dependencies>
       <dependency>
      <groupId>de.project</groupId>
      <artifactId>project-commons</artifactId>
      <version>${common.project.version}</version>
       <dependency>
    <dependencies>

<modules>
    <module>project-domain</module>
    <module>project-web</module>
</modules>

就像這樣......通過這種方式,project-domain和project-web將繼承該依賴關系,並且您將能夠在子模塊中的任何位置使用它...

比使用依賴管理可能是一個很好的改進

暫無
暫無

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

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