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

Maven 3 如何将一个项目添加为另一个项目的依赖项?,maven-3,Maven 3,有两个独立的项目(myWarProject和MyEjbProject)。因此,当我构建myWarProject时,我需要将MyEjbProject安装到本地存储库中,这样我就可以在myWarProject中定义为依赖项并成功打包myWarProject 是否有一种方法可以处理此问题,而无需单独安装MyEjbProject,也无需将其定义为父模块 我知道这可以通过ant构建来实现,但我想知道是否有一种方法可以通过maven来处理 我们可以使用“pom”创建父项目,并将其他两个移动到父项目下。然而,

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

是否有一种方法可以处理此问题,而无需单独安装
MyEjbProject
,也无需将其定义为父模块

我知道这可以通过ant构建来实现,但我想知道是否有一种方法可以通过maven来处理


我们可以使用“pom”创建父项目,并将其他两个移动到父项目下。然而,不幸的是,我不能这样做,因为目前我们已经在CVS中有这两个单独的项目,我不能改变结构。如果我可以通过pom文件来处理这个问题,这就是我要找的。

假设MyEjbProject不是您拥有的或希望使用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>
父项目将获得一个“modules”部分来命名所有子模块。然后,聚合器将使用子模块中的依赖项来实际查找项目的构建顺序)

现在您可以这样做了(在maven 2中工作,刚刚尝试过):


../MyWarp项目
../myejbproject

你好,西蒙,谢谢你的快速回复。事实上,MyEjbProject是另一个maven项目,我在构建MyWarp项目时需要构建它。有没有办法在MyWarp项目中定义MyEjbProject pom?请告诉我:它们以何种方式相互依赖?现在,war项目似乎依赖ejb来构建完整的web应用程序。在这种情况下,这两个项目终究不会如此独立。我编辑了我的答案(最后添加了一些内容),希望这会更接近你的问题。对我的答案进行第二次编辑,也许这次我们很幸运:)嗨,西蒙,是的,正如你所说,我们可以创建带有“pom”的父项目,并将其他两个移动到父项目下。然而,不幸的是,我不能这样做,因为目前我们已经在CVS中有这两个单独的项目,我不能改变结构。如果我能通过pom文件处理这个问题,这就是我要找的。你可以用你刚才在评论中提供的附加信息来编辑你的问题:这可能会让其他试图回答的人澄清你的问题!如果没有其他帮助的话,作为最后一种手段:因为它们已经分开了,您能不能不将它们从CVS签出到本地文件系统上相应的子目录中?将MyEJBProject签出到目录“parent/MyEJBProject”中,并将MyWarProject签出到“parent/MyWarProject”中。不过,这可能是维护的噩梦……谢谢西蒙。我想知道处理这类场景的最佳实践是什么?刚刚添加了另一个解决方案,也许这最终会有所帮助。关于你在评论中的最后一个问题:我自己实际上从未有过这种情况。每当我们构建单独的模块时,我们都将它们放在一个中央存储库(如sonatype nexus)中,供其他项目参考。因此,您构建第一个项目(比如ejb项目),部署它,然后使用已经构建的ejb项目工件(而不是maven项目本身)构建另一个项目(war项目)
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
<!--parent-->
<project>
  <modules>
    <module>../mywarproject</module>
    <module>../myejbproject</module>
  </modules>
</project>