2010-11-16 147 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

相关问题