父子依赖项目示例
示例说明:在eclipse中创建三个maven管理的java项目:HelloA、HelloB、HelloAB,其中项目HelloAB依赖HelloA和HelloB。
HelloA项目
创建HelloA项目,编辑pom文件如下:
在HelloA中编写一个HelloWorldA类,用于后续测试
HelloB项目
创建HelloB项目,编辑pom文件如下:
在HelloB中编写一个HelloWorldB类,用于后续测试
HelloAB项目
创建HelloAB项目,编辑pom文件如下:
在HelloB中编写一个HelloWorldAB类,用于后续测试
现在在Eclipse中,项目HelloAB的结构如下
在项目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。
pom.xml文件内容如下
②在子工程中声明对父工程的依赖
子工程pom文件内容如下
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