父子依赖项目示例

示例说明:在eclipse中创建三个maven管理的java项目:HelloA、HelloB、HelloAB,其中项目HelloAB依赖HelloA和HelloB。

HelloA项目

创建HelloA项目,编辑pom文件如下:

java strom 父子 java父子项目_jar

在HelloA中编写一个HelloWorldA类,用于后续测试

java strom 父子 java父子项目_maven_02

 

 HelloB项目

创建HelloB项目,编辑pom文件如下:

java strom 父子 java父子项目_java strom 父子_03

在HelloB中编写一个HelloWorldB类,用于后续测试

java strom 父子 java父子项目_jar_04

HelloAB项目

创建HelloAB项目,编辑pom文件如下: 

java strom 父子 java父子项目_jar_05

在HelloB中编写一个HelloWorldAB类,用于后续测试

java strom 父子 java父子项目_jar_06

现在在Eclipse中,项目HelloAB的结构如下

java strom 父子 java父子项目_java strom 父子_07

 

在项目HelloAB的HelloWorldAB类中可以直接使用HelloA项目中的HelloWorldA类和HelloB项目的HelloWorldB类。

在Eclipse中也可以执行HelloWorldAB的main方法。因为Eclipse构建执行项目时,能够自动识别工作区中的项目。

如果在HelloWorldAB上执行maven命令compile则有可能失败。因为maven进行项目构建时,严格按照maven寻找依赖的方式,是去maven仓库的comg/hebeu/HelloA目录下去找HelloA-0.0.1-SNAPSHOT.jar,去comg/hebeu/HelloB目录下找HelloB-0.0.1-SNAPSHOT.jar。因此需要使用maven install命令,先将HelloA和HelloB项目安装到maven仓库。

父工程管理依赖

多个maven项目模块工程可能会公用一些jar,且这些项目还想保持公用jar的版本一致,此时可以创建一个父工程。

举例:

HelloA依赖于junit-4.0;HelloB依赖于junit-4.3;HelloAB依赖于junit-4.9

现需要统一管理各个模块工程中对junit的依赖版本。

解决思路:将junit依赖统一提取到父工程中,在自工程中声明junit依赖时不指定版本,以父工程中统一设定的为准。

①创建父工程

创建一般的 Java 工程操作一致,唯一需要注意的是:打包方式处要设置为 pom。

java strom 父子 java父子项目_maven_08

pom.xml文件内容如下

java strom 父子 java父子项目_jar_09

 

②在子工程中声明对父工程的依赖

子工程pom文件内容如下

java strom 父子 java父子项目_jar_10

Maven聚合

若maven模块工程间存在依赖,则在执行maven install或者maven compile时,必须先将其依赖到的所有工程都install至maven仓库。

可以在一个“总的聚合工程”中配置各个参与聚合的模块,从而实现一键安装各个模块工程的目的。

可以新建一个打包类型为pom的maven项目来专门配置聚合信息,也可以将聚合信息配置到父工程中(注:只能配置到打包类型为pom的工程中),pom.xml配置如下:

假设:模块工程HelloAB,依赖于HelloA和HelloB。

<modules>
    <!-- 指定各子工程相对路径,先后顺序无要求,
      因为maven会根据依赖关系自行决定先对谁install -->
    <module>../HelloA</module>
    <module>../HelloB</module>
    <module>../HelloAB</module>
</modules>

 在聚合工程项目的pom.xml上右键-->Run As-->Maven install