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

时间:2013-03-13 10:56:47

标签: maven-3

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

有没有办法处理这个问题而无需单独安装MyEjbProject,也没有定义为父模块。

我知道这可以通过ant build实现,但是想知道是否有办法通过maven来处理?

我们可以使用“pom”创建父项目,并在父项目下移动其他两个项目。但是,遗憾的是我不能这样做,因为目前我们已经将这两个作为CVS中的单独项目,我无法改变结构。如果我可以通过pom文件来处理这个问题,那就是我正在寻找的。

1 个答案:

答案 0 :(得分:57)

假设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>

这就是说,将软件包安装到存储库通常是更好的(也是首选方式),方法是将其作为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>