【maven】maven聚合工程如何打包 解决maven pom.xml各种报错问题 规范pom文件

您所在的位置:网站首页 pom文件中的parent会生成jar包吗 【maven】maven聚合工程如何打包 解决maven pom.xml各种报错问题 规范pom文件

【maven】maven聚合工程如何打包 解决maven pom.xml各种报错问题 规范pom文件

2024-07-10 11:00| 来源: 网络整理| 查看: 265

导入别人项目或者自己搭建项目时,每次必不可少都会遇到maven报错问题 (当然有可能是别人的项目pom写的不规范 自信点可能不是你的问题 但我们需要学会解决)。 这些问题 百度都不知道怎么查,最近着手自己搭建了一个springcloud聚合工程的demo 应该算是比较有代表性了,当然 springboot也可差不多 主要是理解maven的使用, 终于把这些给理解了个大概。文章有点长 原创不易

项目结构介绍: MySpringCloud为父模块,本文以红框内的模块举例, file为业务模块 调用了user-api工具模块,user-api引入了framework工具模块,两个工具模块被common模块管理 在这里插入图片描述

本文从多个层面分析maven综合报错问题:

首先一个比较低级的错误 一般有了开发经验不会犯 但是入门者可能会踩坑 要确保maven配置里面的maven仓库地址是可用的,典型错误:早期maven中央仓库是http传输的,后来改成了https, 网上可能还存在很多错误的mirrors配置 换句话说 仓库地址都是错误的 所以会导致所有依赖下载失败,此外 不同的仓库地址 某些依赖的groupId有可能会不同

在这里插入图片描述

确保了地址是可用的 groupId 和 artifactId都是无误:

maven遇到的主要错误 应该属以下几个 .A Cannot resolve xxxx 错误 .B Could not find artifact 错误 .C must be "pom" but is "jar"错误 .D 程序包XXX 不存在 .E Unable to find main class 解决方式: 低级错误1:找到本地maven仓库路径 查找 .lastUpdated 结尾的文件 全部删除 ,出现这种文件的情况可能由于网络不好,下载错误 并且它会阻止下次下载;低级错误2:如果网络正常 且每次下载都是这个文件,那么很可能就是依赖版本号不正确,远程仓库根本没有这个包,所以一直都是 lastUpdated 。 在这里插入图片描述正文开始 用一个父子多模块maven项目 pom.xml文件实际举例 重点都在注释上面,顺便写了个英文版注释,因为xml比较容易乱码,项目几经周转很可能注释就乱了,这些注释就不复制出来了 研究这玩意 我累了。 父pom 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.4.RELEASE pom com.demo MySpringCloud 0.0.1-SNAPSHOT MySpringCloud Demo project for Spring Boot 1.8 UTF-8 UTF-8 Hoxton.SR8 2.2.1.RELEASE 1.3.0 1.8.2 2.2.5.RELEASE 2.2.5.RELEASE 1.2.76 4.0.1 org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-cloud-alibaba.version} pom import org.projectlombok lombok true ${lombok.version} com.alibaba fastjson ${fastjson.version} com.alibaba.nacos nacos-client ${nacos.version} com.alibaba.csp sentinel-core ${sentinel.version} com.alibaba.csp sentinel-transport-simple-http ${sentinel.version} org.springframework.cloud spring-cloud-starter-openfeign ${openfeign.version} org.springframework.cloud spring-cloud-starter-netflix-hystrix ${netflix-hystrix.version} javax.servlet javax.servlet-api ${servlet.version} org.apache.skywalking apm-toolkit-trace ${skywalking.version} org.apache.skywalking apm-toolkit-logback-1.x ${skywalking.version} common user file 子pom 4.0.0 com.demo MySpringCloud 0.0.1-SNAPSHOT jar com.qkj file 0.0.1-SNAPSHOT file Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-cloud-alibaba.version} pom org.projectlombok lombok true com.alibaba fastjson ${fastjson.version} com.alibaba.nacos nacos-client com.alibaba.csp sentinel-core com.alibaba.csp sentinel-transport-simple-http org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-starter-netflix-hystrix com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config org.apache.skywalking apm-toolkit-trace org.apache.skywalking apm-toolkit-logback-1.x com.qkj user-api 0.0.1-SNAPSHOT compile org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok 2.3.4.RELEASE 工具类父pom :common.pom 4.0.0 com.demo MySpringCloud 0.0.1-SNAPSHOT pom com.qkj common 0.0.1-SNAPSHOT common Demo project for Spring Boot 1.8 file-api user-api framework 工具类子pom : user-api.pom 4.0.0 com.qkj common 0.0.1-SNAPSHOT jar user-api 0.0.1-SNAPSHOT user-api 1.8 org.springframework.cloud spring-cloud-starter-openfeign org.springframework.boot spring-boot-starter com.qkj framework 0.0.1-SNAPSHOT compile 工具类子pom: framework.pom 4.0.0 com.qkj common 0.0.1-SNAPSHOT jar framework 0.0.1-SNAPSHOT framework Demo project for Spring Boot 1.8 org.springframework.cloud spring-cloud-starter-openfeign org.springframework.boot spring-boot-starter javax.servlet javax.servlet-api 什么时候可以不写version?

父pom dependencyManagement 里面声明了version, 而子pom继承了 父pom(parent 节点声明继承关系) ,子pom依赖不声明版本,则使用父pom依赖版本,这在多子模块项目中方便管理。 而整个pom不存在parent时,version是一定要写的,如果不写则会报错

type: 默认为jar 因为我们的是聚合工程,所以父模块要声明为pom,否则会报must be “pom” but is "jar"错误

总结:

maven仓库地址有误或下载缓慢 网络不好 (推荐使用阿里仓库)版本号错误 或缺少版本号多模块项目中未正确声明父模块groupId artifactIdpom工程中 未正确声明type父模块中声明了maven打包插件 而子模块含有工具类模块


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3