打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
maven多个子项目、父项目之间的引用问题


 

问题

下面是一个简略的项目结构图

Parent
`------ childA(BusinessLayer)
          `--- pom.xml

`------ childB(WebLayer)
         `--- pom.xml

`------ pom.xml

1、Parent怎么能找到childA和childB呢?

在maven中,parent模块组织好childA和childB,叫做"聚合",多个模块联合编译。实现起来很简单,只需要在parent的pom文件里加入以下内容。

<modules>   <module>childA</module>   <module>childB</module></modules>

2、是不是这样写就完全ok了?

这样只是告诉maven编译器,在读取parent的pom文件时去找到childA和childB,但还是会分别去编译他们引入的依赖。这样就会导致pom文件引入的包重复!!于是我们引入了"继承"的概念,也就是形成"父子"关系,子pom可以引用到父pom中引入的依赖。具体做法如下:

在parent中,写入以下内容,其中"*"标识的行可以组成一个路径,通过这个路径可以在maven仓库中找到这个pom文件!本例中,path为M2_Path/com/sang/main/Parent-Moduel/1.0.2/xxxx-1.0.2.pom。所以这三个标签是必须的!!!

<modelVersion>4.0.0</modelVersion>  <groupId>com.sang.main</groupId>              *<artifactId>Parent-Moduel</artifactId>         *<version>1.0.2</version>            *<packaging>pom</packaging>  <name>Simple-main</name>

父pom写好了,子pom就通过<parent>标签继承父pom的依赖,如下:

<parent>   <groupId>com.sang.main</groupId>   <artifactId>Parent-Moduel</artifactId>   <version>1.0.2</version>   <relativePath>../pom.xml</relativePath>  <!--本例中此处是可选的--></parent>

值得注意的是<relativePath>标签,如果pom的层次关系就像本例中的那样只隔一层,则可以省略这个。maven同样可以找到子pom。

子pom中引入<parent>标签后,就会从父pom继承<version>等属性了,例如childA只需要再加入如下内容即可!

<modelVersion>4.0.0</modelVersion>  <groupId>com.sang.business</groupId>     <!--和artifactId一起唯一标识这个jar文件--><artifactId>ChildA-module</artifactId><packaging>jar</packaging>         <!--指明打包类型--><name>childA</name>

3、如何添加依赖?

maven可以让我们方便地管理jar包依赖,具体做法如下:

<dependencies>     <dependency>   <!--添加一个jar包依赖-->         <groupId>javax.servlet</groupId>        <artifactId>servlet-api</artifactId>        <version>2.5</version>    </dependency></dependencies>

如果不通过继承,则需要在每个pom中加入这样的依赖,这样子pom对应的模块可以引用到这个jar包。上面提到的重复引用jar包,可以通过下面的方式解决:

主pom中把依赖通过<dependecyManagement>引起来,表示子pom可能会用到的jar包依赖

<dependencyManagement>   <dependencies>      <dependency>           <groupId>javax.servlet</groupId>          <artifactId>servlet-api</artifactId>          <version>2.5</version>      </dependency>   </dependencies></dependencyManagement>

子pom如果需要引用该jar包,则直接引用即可!不需要加入<version>,便于统一管理。此外也可以加入仅在子pom中用到的jar包,比如:

<dependencies>   <dependency>        <groupId>javax.servlet</groupId>        <artifactId>servlet-api</artifactId>   <!--此处不再需要verison了!-->   </dependency>   <dependency>       <groupId>org.codehaus.jackson</groupId>       <artifactId>jackson-core-lgpl</artifactId>       <version>1.9.4</version>    <!--当然也可以加入只在这个子模块中用到的jar包-->   </dependency></dependencies>

4、除了jar包依赖,插件也可以通过这样的方式进行管理

<!-- mainModule --><build>   <pluginManagement>      <plugins>          <plugin>               <groupId>org.apache.maven.plugins</groupId>               <artifactId>maven-source-plugin</artifactId>               <version>2.1.1</version>          </plugin>      </plugins>   </pluginManagement></build><!-- childA --><build>      <plugins>      <plugin>           <groupId>org.apache.maven.plugins</groupId>           <artifactId>maven-source-plugin</artifactId>      </plugin>   </plugins></build>

5、如果子pom间存在引用关系,比如childA引用到了childB的jar包,该怎么做?

<dependency>   <groupId>com.module</groupId>   <artifactId>childA</artifactId>       <!--加上childA的依赖-->   <version>1.0.0</version></dependency>

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Maven命令安装jar包到本地仓库
maven的部署、遇到的问题和心得体会
[maven2]maven2下pom.xml的json-lib的配置
maven自导远程下载包,maven常用命令
Maven Dependency设置,详解!
MyEclipse环境下如何采用Maven导入ojdbc14.jar和ojdbc6.jar | 贝壳里的海
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服