2010-11-16 185 views
1

我在eclipse中有兩個項目,都是maven控制的。參考文獻B和他們在一個平面系統上。我們目前設置的是我們必須建立在B上 - 在系統上生成一個jar,並且引用那個jar。maven在Eclipse中構建依賴關係,多個項目

我想改變這是我們只需要建立一個,它會自動構建B?我可以在Maven/eclipse中做到這一點,我不需要創建一些更高級的項目嗎?

我查看了一些maven文檔 - 但他們只是真的讓我困惑:)。謝謝你的幫助。

聚甲醛的這個樣子的

(B)

<project xmlns="..." xmlns:xsi="..." 
xsi:schemaLocation="..."> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.thetus</groupId> 
<artifactId>irisMDK</artifactId> 
<packaging>jar</packaging> 
<name>irisMDK</name> 
<version>0.1</version> 
<url>...maven.apache...</url> 
<build> 
    <sourceDirectory>java/src/main</sourceDirectory> 
    <plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <source>1.6</source> 
    <target>1.6</target> 
    <testExcludes> 
     <exclude>**/*.java</exclude> 
    </testExcludes> 
    </configuration> 
    </plugin> 
    </plugins> 
    <resources> 
    <resource> 
    <directory>java/src/main</directory> 
    </resource> 
    </resources> 
</build> 
<dependencies> 
    ... 
</dependencies> 
</project> 

------ AND(A):

<project xmlns="..." xmlns:xsi="..." 
xsi:schemaLocation="..."> 
<modelVersion>4.0.0</modelVersion> 
<groupId>local.b</groupId> 
<artifactId>projectB</artifactId> 
<packaging>jar</packaging> 
<name>B</name> 
<version>RELEASE</version> 
<url>...</url> 
<repositories> 
    <repository> 
    <id>maven2-repository.dev.java.net</id> 
    <name>Java.net Repository for Maven</name> 
    <url>...download.java.net/maven...</url> 
    </repository> 
</repositories> 
<build> 
    <plugins> 
        ... 
    </plugins> 
    <sourceDirectory>java/src/main</sourceDirectory> 
    <testSourceDirectory>java/src/test</testSourceDirectory> 
    <resources> 
    </resources> 
</build> 
<dependencies> 
    <dependency> 
    <groupId>local.b</groupId> 
    <artifactId>projectB</artifactId> 
    <scope>system</scope> 
    <version>RELEASE</version> 
    <systemPath>${basedir}/../B/target/B-0.1.jar</systemPath> 
    </dependency> 
... 
</dependencies> 
<reporting> 
    ... 
</reporting> 
</project> 

如果你能告訴我怎麼一個例子改變^^^我將不勝感激!!

回答

3

聽起來像你想要使用多模塊項目here是一個簡單的教程。您可以創建一個父POM,和B.

同時具有A和B的孩子,與一個保持其相關性
+0

這就是我想要做的,但我無法訪問樹的更高層(其他人控制SVN,我們不能訪問更高) – rybit 2010-11-16 19:04:34

+0

好吧,或者兩個項目在概念上是聯繫在一起的,在這種情況下,您應該將它們移動到樹中當前級別的共同父文件夾中,或者它們實際上單獨的項目,在這種情況下將它們構建在一起是沒有意義的。 – 2010-11-17 12:08:09

+0

舊的鏈接是Codehaus,它已被殺死,我已更新它的鏈接到示例書 – 2015-07-09 15:58:27

4

原來的答案: 的M2Eclipse插件,如果你不使用它已經,可以讓你做到這一點。一旦安裝,刪除

<systemPath>${basedir}/../B/target/B-0.1.jar</systemPath> 
從A的pom.xml

,並確保GROUPID,artifactId的,版本匹配了什麼是B的pom.xml中定義的項目,Maven-

然後右鍵單擊>啓用依賴關係解決方案。現在構建應該看看B的本地項目

編輯:

若B的pom.xml看起來像這樣(從你的例子):

<project xmlns="..." xmlns:xsi="..." 
     xsi:schemaLocation="..."> 
     <modelVersion>4.0.0</modelVersion> 
     <groupId>com.thetus</groupId> 
     <artifactId>irisMDK</artifactId> 
     <packaging>jar</packaging> 
     <name>irisMDK</name> 
     <version>0.1</version> 

     ... 
</project> 

在A的POM(這取決於項目B)你的依賴應該是這樣的:

<project> 
... 
    <dependencies> 
     <!--Attributes of project that this project is dependent upon, as defined in that projects POM --> 
     <dependency> 
      <groupId>com.thetus</groupId> 
      <artifactId>irisMDK</artifactId> 
      <version>0.1</version> 
     </dependency> 
... 
    </dependencies> 
.... 
</project> 

這將告訴Maven和超越這個項目的一個顯式依賴於該版本B項目的隨着m2eclipse的,如果你有一個匹配的groupId ,artifactId和版本,並且您啓用了「依賴分辨率」,項目B的內容將自動構建幷包含到項目A中。

另外,在eclipse中打開Maven控制檯(console view-> new console dropdown - >新的Maven控制檯)可以幫助調試項目B不被項目A拾取的原因。

+0

我正在使用該插件,並在那裏,但除非我已經構建該jar它不會找到它。我希望它爲我構建Jar :) – rybit 2010-11-16 19:05:04

+1

您可能需要將範圍更改爲「編譯」(即不是「系統」)才能使工作區解析工作。在進行@BuffaloBuffalo概述的更改之後,您可能還需要右鍵單擊項目並選擇「Maven->更新項目配置」。 – 2010-11-16 19:56:01

+0

@jt這就是我剛纔看到的 - 它在你的例子中看起來像A的pom,你對B的依賴有一個單獨的版本,而不是你在B的pom.xml的版本 – BuffaloBuffalo 2010-11-16 19:56:46