Maven中多模块的创建,依赖及主子pom之间的依赖继承
Maven中多模块的创建及依赖继承
在项目右键,new->module就可以创建新的模块
建立如图所示的模块
子pom会自动使用父pom中的依赖(jar包)
此时,各自pom.xml文件如下(引入了"继承"的概念,也就是形成"父子"关系,子pom可以引用到父pom中引入的依赖):
parent(bigdata)
:
<artifactId>bigdata</artifactId>
<modules>
<module>common</module>
<module>behavior</module>
</modules>
childA(behavior)
<parent>
<artifactId>bigdata</artifactId>
<groupId>com.cebbank</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>behavior</artifactId>
childB(common)
<parent>
<artifactId>bigdata</artifactId>
<groupId>com.cebbank</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>common</artifactId>
父模块作版本管理不实际依赖,子模块按需依赖
主pom中把依赖通过引起来,表示子pom可能会用到的jar包依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</dependencyManagement>
子pom如果需要引用该jar包,则直接引用即可!不需要加入,便于统一管理。此外也可以加入仅在子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>
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
除了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>
Maven中多子模块的依赖关系
子pom间存在引用关系:common被引用到了behavior
IDEA中的操作
:
(behavior)
的pom文件:
<dependencies>
<dependency>
<groupId>com.cebbank</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
Maven中多模块的调用及测试
在common中建Demo1的类
:
public class Demo1 {
public void test(){
System.out.println("第一个测试方法");
}
}
在behavior调用Demo1
: