2017-09-14 132 views
0

我已經閱讀了許多關於Maven入門的文檔和教程。但很少有東西仍然不清楚:Maven如何尋找依賴關係

1)當pom.xml包含<dependency>時,Maven會將該工件/ JAr放入Maven本地存儲庫中。對 ?

2)假設,我在我的MAven項目中有子模塊。那麼建立這個項目的正確方法是什麼?應從父模塊開始,然後轉到其他子模塊。對 ?那麼Maven會創建依賴jar並將它們放在本地Maven Repo文件夾中?

3)例如,如果我的子模塊pom.xml包含以下依賴項。我應該如何將它(vd-ps.jar)提供給Maven,以便Maven在SubModule/pom.xml上執行Maven clean安裝時找到它?我的意思是說Maven需要什麼或從哪裏產生這樣的用戶定義的vd-ps.jar?從編譯的類文件?

<dependencies> 
    <dependency> 
     <groupId>com.b.t</groupId> 
     <artifactId>vd-ps</artifactId> 
     <version>1.1.0</version> 
    </dependency> 
    </dependencies> 

好吧,讓我直接問我想達到什麼:我有以下pom.xml。並從中我想創建一個單獨的Maven項目(Say PTest),它使用另一個大型多模塊maven項目的依賴項(jar)。這裏: - 我的多模塊項目中有一個名爲v-parent的模塊,它的trunk文件夾中有pom.xml。

<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> 
    <parent> 
    <groupId>com.b.t</groupId> 
    <artifactId>v-parent</artifactId> 
    <version>3.9.0</version> 
    </parent> 


    <groupId>com.b.t.test</groupId> 
     <artifactId>p_test</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <name>ptesting</name> 
     <dependencies> 
     <dependency> 
      <groupId>com.b.t</groupId> 
      <artifactId>v-ps</artifactId> 
      <version>1.1.0</version> 
     </dependency> 
     </dependencies> 
    </project> 

1)現在我應該在哪裏在Eclipse把這個子模塊V-父母在我的新創建Maven項目(PTEST)?

我的意思是我該如何確切地讓我的PTest/pom.xml找到這個父罐子v-parent.jar?

我有單獨的名爲v-ps.jar的jar文件。我應該在哪裏準確地(在哪個結構中)將它放在Maven本地回購中,以便它能夠找到它?

回答

1

每次運行

mvn clean install 

您的項目將建成並在您的本地存儲庫(通常〜/ .m2目錄/庫)所產生的假象將被「安裝」。因此,如果您構建了使com.b.t:vd-ps:1.1.0這個jar的項目,那麼這個項目將在您的本地存儲庫中可用,以供其他項目用作依賴項。

如果你依賴是另一個模塊中它可以在包括像這樣同一母公司下:

<dependency> 
    <groupId>com.b.t</groupId> 
    <artifactId>vd-ps</artifactId> 
    <version>${project.version)</version> 
</dependency> 

如果您運行

mvn clean deploy 

你的神器將建成並部署到遠程(Nexus或Artifactory或類似的),只要你在你的pom.xml中有正確的配置

請參閱https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

+0

如果說我無法解決工件:com.btvd-ps:1.1.0等,我檢查它存在〜/ .m2/repository/b/t/vd-ps/1.1.0 /vd-ps-1-1-0.jar.lastupdated任何想法爲什麼不能找到它? – Ragini

+0

'.jar.lastupdated'不是JAR,只是一個標記文件。 – Tome

+0

我建議你刪除目錄〜/ .m2/repository/com/b/t/vd-ps/1.1.0並重新運行該項目的mvn build,然後檢查你有沒有製造商文件的jar文件正如@Tome所說。 –

0

1)現在我應該在哪裏把這個子模塊v-parent放到我在eclipse中新創建的Maven項目(PTest)中? 我的意思是我該如何確切地讓我的PTest/pom.xml找到這個父罐子v-parent.jar?

所以在這種情況下,「v-parent」將成爲Eclipse包裝類型「pom」中的另一個項目。如果你想建立的子項目「p_test」,其依賴的「V-PS」,你可以列出他們作爲「V父」項目的POM文件模塊象下面這樣:

<project> 
    <groupId>com.b.t</groupId> 
    <artifactId>v-parent</artifactId> 
    <version>3.9.0</version> 
    <packaging>pom</packaging> 

    <modules> 
    <module>p_test</module> <!-- Make sure you provide the right path here --> 
    <module>v-ps</module> <!-- Make sure you provide the right path here --> 
    </modules> 
</project> 

現在,當你在「v-parent」上運行「mvn clean install」,它應該建立「p_test」和「v-ps」項目並將他們的jar文件拷貝到本地.m2/repository中,假設這些項目不會在我們的過程中出錯構建。因此,父項目就像子項目的集合一樣,並幫助一次性構建它們。

我有單獨的名爲v-ps.jar的jar文件。我應該在哪裏準確地(在哪個結構中)將它放在Maven本地回購中,以便它能夠找到它?

如果你有這個項目的源代碼,那麼你應該把它作爲「v-parent」項目的pom的一部分,就像我上面提到的那樣,當你創建父項時,寫入您當地的.m2回購。或者,如果您有「v-ps」項目的源代碼,則可以使用「mvn clean install」直接構建它,並將該jar寫入回購。