如何将一个项目添加为另一个项目的依赖项?


76

有两个独立的项目(myWarProjectMyEjbProject)。因此,当我构建时,myWarProject我需要将MyEjbProjectin安装到本地存储库中,以便随后可以在myWarProject中定义为依赖项并成功打包myWarProject。

有没有一种方法可以解决此问题,而无需MyEjbProject单独安装,也无需定义为父模块。

我知道这可以通过构建蚂蚁来实现,但是想知道是否有一种通过Maven处理的方法?

我们可以使用“ pom”创建父项目,并将其他两个移到父项目下。但是,不幸的是,我无法执行此操作,因为当前我们已经将这两个作为CVS中的独立项目使用,因此无法更改结构。如果我可以通过pom文件处理此问题,这就是我要寻找的。


嗨,西蒙,谢谢您的快速回复。实际上,MyEjbProject是另一个在构建myWarProject时需要构建的Maven项目。有没有办法在myWarProject中定义MyEjbProject pom?
kds

请告诉我:它们以什么方式相互依赖?现在看来,战争项目依赖ejb来构建完整的Web应用程序。在这种情况下,这两个项目毕竟不会如此独立。
Simon Hellinger 2013年

我编辑了答案(在结尾处添加了一些内容),希望它能更接近您的问题。
Simon Hellinger 2013年

对我的答案的第二次编辑,也许这次我们很幸运:)
Simon Hellinger 2013年

Answers:


69

假设MyEjbProject不是您拥有的另一个Maven项目或不是要使用Maven构建的Maven项目,则可以使用系统依赖项来链接到该项目的现有jar文件,如下所示

<project>
   ...
   <dependencies>
      <dependency>
         <groupId>yourgroup</groupId>
         <artifactId>myejbproject</artifactId>
         <version>2.0</version>
         <scope>system</scope>
         <systemPath>path/to/myejbproject.jar</systemPath>
      </dependency>
   </dependencies>
   ...
</project>

也就是说,通常最好的方法是将软件包安装到存储库中,方法是使其成为Maven项目并进行构建或以您似乎已在执行的方式安装。


但是,如果它们相互依赖,则始终可以创建一个单独的父项目(必须是“ pom”项目),并将其他两个项目声明为其“模块”。(子项目不必将第三个项目声明为其父项目)。结果,您将为新的父项目获得一个新目录,您很可能还会在其中放置两个独立的项目,如下所示:

parent
|- pom.xml
|- MyEJBProject
|   `- pom.xml
`- MyWarProject
    `- pom.xml

父项目将获得一个“模块”部分来命名所有子模块。然后,聚合器将使用子模块中的依赖项来实际找出项目的构建顺序)

<project>
   ...
   <artifactId>myparentproject</artifactId>
   <groupId>...</groupId>
   <version>...</version>

   <packaging>pom</packaging>
   ...
   <modules>
     <module>MyEJBModule</module>
     <module>MyWarModule</module>
   </modules>
   ...
</project>

这样,项目可以相互关联,但是(一旦将它们安装在本地存储库中)仍然可以单独用作其他项目中的工件


最后,如果您的项目不在相关目录中,则可以尝试将它们指定为相对模块:

filesystem
 |- mywarproject
 |   `pom.xml
 |- myejbproject
 |   `pom.xml
 `- parent
     `pom.xml

现在您可以做到这一点(在Maven 2中工作,只需尝试一下):

<!--parent-->
<project>
  <modules>
    <module>../mywarproject</module>
    <module>../myejbproject</module>
  </modules>
</project>

嗨,西蒙,是的,正如您所说,我们可以使用“ pom”创建父项目,并将其他两个移到父项目下。但是,不幸的是,我无法执行此操作,因为当前我们已经将这两个作为CVS中的独立项目使用,因此无法更改结构。如果我可以通过pom文件处理此问题,这就是我要寻找的。
kds

您可以使用刚刚在评论中提供的其他信息来编辑问题:它可以为其他尝试回答的人澄清您的问题!
Simon Hellinger 2013年

如果没有其他帮助,则是万不得已的方法:由于它们已经分开,您是否不能仅将它们从CVS中检出到本地文件系统上的相应子目录中?将MyEJBProject检出到目录“ parent / myejbproject”中,并将MyWarProject检出到“ parent / mywarproject”中。不过,这可能是维护方面的噩梦……
Simon Hellinger

谢谢西蒙。我想知道处理此类情况的最佳实践是什么?
kds

刚刚添加了另一个解决方案,也许这最终可以有所帮助。关于您在评论中的最后一个问题:我本人实际上从未遇到过这种情况。每当我们构建单独的模块时,都会将它们放在中央存储库(例如sonatype nexus)中,以供其他项目参考。因此,您构建第一个项目(例如ejb项目),进行部署,然后使用已经构建的ejb项目工件而不是maven项目本身来构建另一个项目(战争项目)
Simon Hellinger
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.