上篇文章介绍了依赖,这篇文章介绍下在项目中是怎么应用的。
以 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>basicInfo-service pom文件 部分jar包
<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 包依赖分析工具
如果没有这个图标-请百度
总结: 大道至简!
