【问题标题】:maven build dependencies in Eclipse, multiple projectsmaven在Eclipse中构建依赖,多个项目
【发布时间】:2011-05-11 00:19:38
【问题描述】:

我在eclipse中有两个项目,都是maven控制的。 A 引用 B,它们位于平面系统上。我们目前的设置是我们必须在 B 上构建 - 在系统上生成一个 jar,然后 A 引用该 jar。

我想将其更改为我们只需要构建 A,它会自动构建 B?我可以在 Maven/eclipse 中做到这一点,这样我就不必创建一些更高的项目吗?

我查看了一些 maven 文档 - 但它们真的让我很困惑 :)。谢谢你的帮助。

pom 是这样的

(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>

----- 和(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>

如果你能告诉我如何改变的例子^^^我将不胜感激!!

【问题讨论】:

    标签: java eclipse maven-2 m2eclipse


    【解决方案1】:

    听起来你想使用多模块项目,here 是一个简单的教程。您将创建一个父 POM,并将 A 和 B 作为子级,而 A 保持对 B 的依赖。

    【讨论】:

    • 这就是我想做的,但我无法访问树的更高级别(其他人控制着 SVN,我们无法访问更高级别)跨度>
    • 要么这两个项目在概念上是相关联的,在这种情况下,您应该将它们移动到树中当前级别的公共父文件夹中,或者它们实际上是独立的项目,在这种情况下将它们构建在一起没有意义。
    • 旧的链接是codehaus,它已被杀死,我已经通过示例书更新了它与maven的链接
    • @rybit 您也可以在同一级别上创建一个模块项目,而不是 &lt;module&gt;moduleA&lt;/module&gt; 您指定 &lt;module&gt;../moduleA&lt;/module&gt;
    【解决方案2】:

    原答案: M2Eclipse 插件,如果你还没有使用它,允许你这样做。安装后,删除

    <systemPath>${basedir}/../B/target/B-0.1.jar</systemPath>
    

    来自 A 的 pom.xml 并确保 groupid、artifactid、版本与 B 的 pom.xml 中定义的匹配

    然后右击项目,Maven->Enable Dependency Resolution。构建现在应该查看 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 和 eclipse 项目 A 显式依赖于项目 B 的该版本。使用 M2Eclipse,如果您的工作区中有匹配的 groupId、artifactId 和版本,并且您启用了“依赖解析”,则项目 B 的内容将自动构建并包含在项目 A 中。

    另外,在 Eclipse 中打开 Maven 控制台(控制台视图->新控制台下拉菜单->新 maven 控制台)可以帮助调试为什么项目 B 没有被项目 A 拾取。

    【讨论】:

    • 我正在使用那个插件,并且有那个插件,但除非我构建了那个 jar,否则它不会找到它。我希望它为我构建 Jar :)
    • 您可能需要将范围更改为“编译”(即不是“系统”)才能使工作区分辨率正常工作。在进行@BuffaloBuffalo 概述的更改后,您可能还需要右键单击项目并选择“Maven->更新项目配置”。
    • @jt 这就是我刚刚看到的——在您的 A 的 pom 示例中,您对 B 的依赖项具有与您在 B 的 pom.xml 版本中定义的版本不同的版本
    • 我得到了关于那个的错误。我认为如果范围是“system”,您只能指定“systemPath”。
    • 我可以建立一个本地回购吗?在 'file://$(basedir)/..' 处,然后将 groupid 更改为 'ProjectB'(项目名为 ProjectB)?
    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2012-08-20
    • 2016-09-20
    • 2012-04-28
    • 2018-09-08
    相关资源
    最近更新 更多