上篇文章介绍了依赖,这篇文章介绍下在项目中是怎么应用的。
以 basicInfo 服务为例:
basicinfo-parent pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.dmsdbj.itoo</groupId>
<artifactId>itoo-root</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>com.dmsdbj.itoo</groupId>
<artifactId>basicInfo-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
</dependencies>
<modules>
<module>basicInfo-api</module>
<module>basicInfo-service</module>
<module>basicInfo-web</module>
</modules>
</project>
basic-api pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.dmsdbj.itoo</groupId>
<artifactId>basicInfo-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>com.dmsdbj.itoo</groupId>
<artifactId>basicInfo-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.dmsdbj.itoo</groupId>
<artifactId>itoo-tool</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<exclusions>
<exclusion>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.dmsdbj.itoo</groupId>
<artifactId>basicInfo-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>com.dmsdbj.itoo</groupId>
<artifactId>basicInfo-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.dmsdbj.itoo</groupId>
<artifactId>itoo-tool</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<exclusions>
<exclusion>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
因为service 的pom 文件中 依赖 了 api 的jar 包,而api 也没有屏蔽传递依赖 ,所以api的中的jar文件 都会 传递 到 service 文件中。
也许大家会奇怪,api 的pom文件中并没有依赖那么多的jar包,为什么basic-api 会传递依赖这么多jar包那? 那是因为 parent 是聚合工程,parent 中的jar包 在 其子工程中都会有。
改进方案:
在 parent 和api 的pom文件中,所有依赖的jar包 都 加上 <scope>provided<scope> 标签,屏蔽 传递依赖。
改进之后的效果图:
小技巧: idea jar 包依赖分析工具
如果没有这个图标-请百度
总结: 大道至简!