idea + maven + nexus 实战全套
- 背景介绍
- 硬件介绍
- 技能列表
- 使用 idea 优化 maven jar 包依赖。查看、清除 冲突和重复的 jar
- 使用 idea 创建 pom 、 jar 、 war 等工程
- 设计 maven 工程架构。包含 父子工程、聚合工程、独立 jar 包
- 验证结果
- 总结
背景介绍
接上一篇文章,linux 上部署 nexus 和 maven 上篇文章研究完了 基本部署和上传 jar 包及下载 jar 包。那么核心技术已经解决。接下来的任务是把一个传统的 lib-jar web 工程转换成 maven 工程。在这中间也反推上篇文章的可行性是没有问题的。
硬件介绍
- apache-maven-3.5.2 提取码: x66x
- idea 2019 企业版
技能列表
- 使用 idea 优化 maven jar 包依赖。查看、清除 冲突和重复的 jar 包
- 使用 idea 创建 pom 、 jar 、 war 等工程
- 设计 maven 工程架构。包含 父子工程、聚合工程、独立 jar 包
使用 idea 优化 maven jar 包依赖。查看、清除 冲突和重复的 jar
优秀的文章 上述文章描述了idea 如何查看、排除 maven jar 包的基本操作。我在此处补充描述一些常用操作。
如何快速认识和排查相关依赖
- 第一步看直接依赖
这一列是工程中直接写 dep 产生的依赖。此处会产生大量重复依赖,因为你也写的两个或多个 dep 之前是否存在引用关系。如 A 引用了 B ,我们把 B 也写了一个 dep
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
反面案例重复引用 此时我们可以大胆的删除 servlet-api 。因为 它被 jsp-api 引用了。项目会自动加载 servlet-api 包。
为了安全起见,删除被引用的包之后,可以再次观察下方图片处,查看一下对应的包是否还存在。一般都会存在,不过可能版本会改变。因为 jsp-api 中引用的版本不一定和主动引用的一致。最后使用哪个版本由项目自己决定,如果需要使用高版本,则不用删除了。此处只是介绍如何排查。
- 查看间接重复引用
大家的项目可能存在大量虚线。其实我并不知道这些虚线会导致什么问题,只是强迫症让我必须把它清理调。如下图:
- 我们选中重复的包名。可以通过 ctrl+f 快速选择
- 选择之后。点击图片按钮处,查看引用详情。
- 详情如图。可以使用 shift + delete 删除一个引用
- idea 会自动改写 pom 配置,删除一处引用
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-jdbc</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-tx</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
这样咱就清除了间接重复引用的包。
使用 idea 创建 pom 、 jar 、 war 等工程
如下即可
设计 maven 工程架构。包含 父子工程、聚合工程、独立 jar 包
其实我的工程设计也是参照一个经典的教学项目。 淘淘商城
结构如图 : 直接用聚合工程说明所有
验证结果
总结
- 当完成所有清除动作之后,验证成果的时候。重新创建一个本地仓库 路径,将配置、启动的动作重新来一次。这样不用担心一些工具缓存带来临时有效的蒙蔽。
- 使用聚合工程的时候。module 的顺序可能有一定的影响,最好将基础的 pojo 放在最前面
- install 的时候,pojo 优先 install 。然后直接 install 聚合工程的 ,不用一一再去 install 其他子module ,我这边一直报错,因为子 module 认为 依赖的 pojo 是私服或公网需要提供的。一直报错。
- 多 build 项目。可以让你知道 jar 包是否引全了。版本是否是代码需要的。
- SNAPSHOT 版本的 jar 包不能直接使用私服的上传页面进行上传,得用 maven 命令如下
mvn deploy:deploy-file -DgroupId=com.yiyibang.internethospital -DartifactId=yeb-patient-pojo -Dversion=1.0.0-SNAPSHOT -Dpackaging=jar -Dfile=E:\localRepository\com\yiyibang\internethospital\yeb-patient-pojo\1.0-SNAPSHOT\yeb-patient-pojo-1.0-SNAPSHOT.jar -Durl=http://47.99.69.84:8081/repository/maven-snapshots/ -DrepositoryId=snapshots