主题:把前两天文章里的实例pom文件调整一下
目标:指出一些坑,给同样需求的人一些参考;刻意练习:细致完整
目标读者:java开发
把前两天文章《》里的pom文件结构调整一下。
将版本的定义、范围的定义、built相关插件及一些通用的配置都统一放入父pom中,子pom只声明依赖。
这样方便统一管理,而且子模块看起来清爽很多。(相比之前,增加了数据库与亚马逊sdk相关依赖)
示例:
父pom:
<?xml version="1.0" encoding="UTF-8"?> < 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 https://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion >4.0.0</ modelVersion > < parent > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-parent</ artifactId > < version >2.6.4</ version > < relativePath /> <!-- lookup parent from repository --> </ parent > < groupId >com.waymap</ groupId > < artifactId >o2o</ artifactId > < version >1.0</ version > < name >o2o</ name > < description >o2o new project</ description > < packaging >pom</ packaging > < modules > < module >o2o-common</ module > <!-- <module>o2o-amazon-information</module> <module>o2o-amazon-sc</module>--> </ modules > < properties > < java.version >1.8</ java.version > < maven.resources.plugin.version >3.1.0</ maven.resources.plugin.version > < spring.cloud.alibaba.version >2021.0.1.0</ spring.cloud.alibaba.version > < spring.cloud.version >2021.0.1</ spring.cloud.version > < spring.boot.version >2.6.5</ spring.boot.version > < mybatis.plus.boot.starter.version >3.5.1</ mybatis.plus.boot.starter.version > < lombok.version >1.18.22</ lombok.version > < o2o.common.version >1.0.0</ o2o.common.version > < threetenbp.version >1.3.5</ threetenbp.version > < gson.fire.version >1.8.0</ gson.fire.version > < logging.interceptor.version >2.7.5</ logging.interceptor.version > < springfox.swagger2.version >2.9.2</ springfox.swagger2.version > < gson.version >2.8.5</ gson.version > < jackson.version >2.11.2</ jackson.version > </ properties > < dependencyManagement > < dependencies > < dependency > < groupId >org.springframework.cloud</ groupId > < artifactId >spring-cloud-dependencies</ artifactId > < version >${spring.cloud.version}</ version > < type >pom</ type > < scope >import</ scope > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-dependencies</ artifactId > < version >${spring.boot.version}</ version > < type >pom</ type > < scope >import</ scope > < exclusions > < exclusion > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-core</ artifactId > </ exclusion > < exclusion > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-databind</ artifactId > </ exclusion > < exclusion > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-annotations</ artifactId > </ exclusion > </ exclusions > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-test</ artifactId > < version >${spring.boot.version}</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >com.alibaba.cloud</ groupId > < artifactId >spring-cloud-alibaba-dependencies</ artifactId > < version >${spring.cloud.alibaba.version}</ version > < type >pom</ type > < scope >import</ scope > </ dependency > < dependency > < groupId >com.baomidou</ groupId > < artifactId >mybatis-plus-boot-starter</ artifactId > < version >${mybatis.plus.boot.starter.version}</ version > </ dependency > < dependency > < groupId >org.projectlombok</ groupId > < artifactId >lombok</ artifactId > < version >${lombok.version}</ version > < scope >provided</ scope > </ dependency > < dependency > < groupId >com.waymap.o2o</ groupId > < artifactId >o2o-common</ artifactId > < version >${o2o.common.version}</ version > </ dependency > <!-- amazon sdk 依赖 start--> < dependency > < groupId >org.threeten</ groupId > < artifactId >threetenbp</ artifactId > < version >${threetenbp.version}</ version > </ dependency > < dependency > < groupId >com.google.code.gson</ groupId > < artifactId >gson</ artifactId > < version >${gson.version}</ version > </ dependency > < dependency > < groupId >io.gsonfire</ groupId > < artifactId >gson-fire</ artifactId > < version >${gson.fire.version}</ version > </ dependency > < dependency > < groupId >com.squareup.okhttp</ groupId > < artifactId >logging-interceptor</ artifactId > < version >${logging.interceptor.version}</ version > </ dependency > < dependency > < groupId >io.springfox</ groupId > < artifactId >springfox-swagger2</ artifactId > < version >${springfox.swagger2.version}</ version > </ dependency > <!-- amazon sdk 依赖 end--> <!-- spring boot jar包冲突,可能导致无法启动 start--> < dependency > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-core</ artifactId > < version >${jackson.version}</ version > </ dependency > < dependency > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-databind</ artifactId > < version >${jackson.version}</ version > </ dependency > < dependency > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-annotations</ artifactId > < version >${jackson.version}</ version > </ dependency > <!-- spring boot jar包冲突,可能导致无法启动 end--> </ dependencies > </ dependencyManagement > < build > < plugins > < plugin > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-maven-plugin</ artifactId > </ plugin > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-surefire-plugin</ artifactId > < configuration > < skipTests >true</ skipTests > </ configuration > </ plugin > <!-- 指定maven-resources-plugin版本 不然会报错,好像和spring-boot版本有关系--> < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-resources-plugin</ artifactId > < version >${maven.resources.plugin.version}</ version > </ plugin > </ plugins > </ build > </ project >
通用common模块pom:
<?xml version="1.0" encoding="UTF-8"?> < 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 https://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion >4.0.0</ modelVersion > < parent > < groupId >com.waymap</ groupId > < artifactId >o2o</ artifactId > < version >1.0</ version > </ parent > < groupId >com.waymap.o2o</ groupId > < artifactId >o2o-common</ artifactId > < version >1.0.0</ version > < name >o2o-common</ name > < description >公共模块二方库</ description > < packaging >jar</ packaging > < dependencies > < dependency > < groupId >org.projectlombok</ groupId > < artifactId >lombok</ artifactId > </ dependency > <!-- 为了成功打包 start --> < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter</ artifactId > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-test</ artifactId > </ dependency > <!-- 为了成功打包 end --> </ dependencies > < build > < plugins > < plugin > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-maven-plugin</ artifactId > < configuration > < classifier >exec</ classifier > </ configuration > </ plugin > </ plugins > </ build > </ project >
注:由于项目中建了common模块,其他模块也需要引用,所以需要在common模块的pom文件里,增加如下配置,否则引用common的模块可能会编译失败(但项目可以正常启动运行)。
< build > < plugins > < plugin > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-maven-plugin</ artifactId > < configuration > < classifier >exec</ classifier > </ configuration > </ plugin > </ plugins > </ build >
业务模块pom:
<?xml version="1.0" encoding="UTF-8"?> < 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 https://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion >4.0.0</ modelVersion > < parent > < groupId >com.waymap</ groupId > < artifactId >o2o</ artifactId > < version >1.0</ version > </ parent > < groupId >com.waymap.o2o</ groupId > < artifactId >o2o-amazon-sc</ artifactId > < version >1.0.0</ version > < name >o2o-amazon-sc</ name > < description >亚马逊卖家中心(seller central)</ description > < dependencies > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-web</ artifactId > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-actuator</ artifactId > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-test</ artifactId > </ dependency > < dependency > < groupId >com.alibaba.cloud</ groupId > < artifactId >spring-cloud-starter-alibaba-nacos-discovery</ artifactId > </ dependency > < dependency > < groupId >org.springframework.cloud</ groupId > < artifactId >spring-cloud-starter-loadbalancer</ artifactId > </ dependency > < dependency > < groupId >org.springframework.cloud</ groupId > < artifactId >spring-cloud-starter-openfeign</ artifactId > </ dependency > < dependency > < groupId >com.alibaba.cloud</ groupId > < artifactId >spring-cloud-starter-alibaba-nacos-config</ artifactId > </ dependency > < dependency > < groupId >org.springframework.cloud</ groupId > < artifactId >spring-cloud-starter-bootstrap</ artifactId > </ dependency > < dependency > < groupId >com.baomidou</ groupId > < artifactId >mybatis-plus-boot-starter</ artifactId > </ dependency > < dependency > < groupId >org.mariadb.jdbc</ groupId > < artifactId >mariadb-java-client</ artifactId > </ dependency > < dependency > < groupId >org.projectlombok</ groupId > < artifactId >lombok</ artifactId > </ dependency > < dependency > < groupId >com.waymap.o2o</ groupId > < artifactId >o2o-common</ artifactId > </ dependency > <!-- 亚马逊官方sdk --> < dependency > < groupId >com.amazon.sellingpartnerapi</ groupId > < artifactId >sellingpartnerapi-aa-java</ artifactId > < version >1.0</ version > < scope >system</ scope > < systemPath >${project.basedir}/src/main/resources/lib/sellingpartnerapi-aa-java-1.0.jar</ systemPath > </ dependency > <!-- amazon sdk 依赖 start--> < dependency > < groupId >org.threeten</ groupId > < artifactId >threetenbp</ artifactId > </ dependency > < dependency > < groupId >io.gsonfire</ groupId > < artifactId >gson-fire</ artifactId > </ dependency > < dependency > < groupId >com.squareup.okhttp</ groupId > < artifactId >logging-interceptor</ artifactId > </ dependency > < dependency > < groupId >io.springfox</ groupId > < artifactId >springfox-swagger2</ artifactId > </ dependency > <!-- amazon sdk 依赖 end--> <!-- spring boot jar包冲突,可能导致无法启动 start--> < dependency > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-core</ artifactId > </ dependency > < dependency > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-databind</ artifactId > </ dependency > < dependency > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-annotations</ artifactId > </ dependency > <!-- spring boot jar包冲突,可能导致无法启动 end--> </ dependencies > </ project >
其中亚马逊的SDK因为没有maven*服私**,所以,直接放在项目目录了。这个jar特别一点,所以没有把版本那些放在父pom里。
另外,也是因为加了这个sdk已经相关的jar包,才导致jackson的版本冲突,项目启动不了。之前没加的时候,都是可以正常启动、编译的。所以,不一定要像我这样处理。如果启动报错了,可以像我这样处理,至少亲测这两个版本的搭配是OK的。
看起来没多少东西,但确实是一步一步坑。这应该是我真正意义上的从0到1搭建一个微服务项目。
这样的机会还挺难得的,毕竟一般进公司的时候,项目早都建好了,只需要在里面写业务代码就好了,顶多新建一个模块,坑都被趟过一遍了,基本不会出问题。
所以,最近也因此学到了不少东西。
学东西一定要自己动手实操才行,光眼睛学会是远远不够的,要手也学会才行。
字数:不统计
耗时:不统计
··················END··················