IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理
公司新项目需使用java技术栈,便使用IDEA搭建了一个多SpringBoot项目的聚合工程,因为初次使用,遇到了很多问题,maven打包时各种报错,在网上查了好多终于解决了,为巩固记忆,特作此记录。
一、先记录一下创建父子工程一些需要注意的地方:
1.创建父子工程
在IDEA中使用Spring Initializr的方式创建SpringBoot工程,GroupId为域.公司名,例如com.company,Artifact为项目名,例如testproject,主要注意父子项目保持组名一致
父项目创建好后,将.mvm、src文件夹,mvnw、mvnw.cmd文件直接删除,并修改pom.xml的packaging更改为pom。
2.创建子工程
选中父项目,鼠标右键,然后点击New—>Module,同样方式创建SpringBoot工程,注意项目的保存路径要加上'\子项目名',否则项目工程会乱掉
3.修改子项目的pom.xml文件,将其中的parent更改为对应父项目的信息,如下:
4.父项目的pom.xml中增加modules节点,并增加新增的子项目
5.添加依赖引用
一般情况下是,在父项目的pom.xml中用dependencyManagement统一版本管理,子项目中根据需要自行声明引用。
如下:
父项目pom.xml的properties中声明jar包版本号


- <dependencyManagement>
- <dependencies>
- <!-- SpringBoot的依赖配置-->
- <dependency>
- <artifactId>spring-boot-dependencies</artifactId>
- <version>2.3.4.RELEASE</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <!--阿里数据库连接池 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- <version>${druid.version}</version>
- </dependency>
- <!--Token生成与解析-->
- <dependency>
- <groupId>io.jsonwebtoken</groupId>
- <artifactId>jjwt</artifactId>
- <version>${jwt.version}</version>
- </dependency>
- <!--验证码 -->
- <dependency>
- <groupId>com.github.penggle</groupId>
- <artifactId>kaptcha</artifactId>
- <version>${kaptcha.version}</version>
- </dependency>
- ....
- <!-- 通用工具-->
- <dependency>
- <groupId>com.loxaump</groupId>
- <artifactId>loxaump-common</artifactId>
- <version>${loxaump.version}</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
dependencyManagement依赖声明
子项目中声明所需引用,为防止子项目引用时,因为依赖jar包版本不一致,导致打包时找不到对应jar包错误(maven本地中会自动下载有依赖的版本),尽量子项目中不单独声明版本号。


- <dependencies>
- <!-- Spring框架基本的核心工具 -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- </dependency>
- <!-- SpringWeb模块 -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- </dependency>
- <!-- spring security 安全认证 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-security</artifactId>
- </dependency>
- ....
- </dependencies>
子项目dependencies
二、maven打包时报错 程序包不存在
父子项目创建好后,使用maven工具
其他的子项目依赖common项目,打包后,明明正常打好了common的jar包,在maven本地仓中也能找到对应的版本,但是在打其他项目时,仍会提示程序包 com.loxaump.common.service.contants不存在等一系列类找不到。
如下图所示:
解决方法:
SpringBoot打成jar包我们一般使用spring-boot-maven-plugin这个插件,当配置了该插件后,运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,使用“java -jar”命令就可以直接运行。
1.因为spring-boot-maven-plugin在打成jar包时会默认找public static void main(String[] args){***}方法,这时候如果项目有多个main方法,就有问题了,需要删掉其他的main方法,只留SpringBoot的入口main方法,或者在pom.xml中用start-class属性指定项目main方法:
2..将父项目ROOT中的spring-boot-maven-plugin更换成org.apache.maven.plugins
更改为:
encoding即为:UTF-8
修改后,在重新打包,问题解决。
补充
如果打包时,报错:Cannot resolve xxx.xxx.xxx-xxx:unknown等错误时,应该是本地maven仓库中存在多个版本的jar包,并且因为其他原因导致某个jar包下载失败,这时,就到本地仓将jar包的文件夹删除,重新使用maven打包下载即可。
IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理的更多相关文章
- hive中创建子表并插入数据过程初始化MR报错解决方法
本文继成上一篇通过hive分析nginx日志文章,详情参考下面链接: http://www.cnblogs.com/wcwen1990/p/7066230.html 接着来: 创建业务子表: drop ...
- Maven打包项目失败;报错:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project Hello: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/we
报错信息: E:\MIKEY\mikey\HTML5\TestMaven_01>mvn package [INFO] Scanning for projects... [INFO] [INFO] ...
- Maven多模块项目编译失败:程序包xxx不存在
项目结构如下: parent(父类工程) | - - - - - common(通用工具类子工程) | - - - - - projectA(springboot子工程,依赖common工程) pom ...
- java maven项目 pom.xml plugin 报错, build path 找不到 jconsole-1.8.0.jar 和 tools-1.8.0.jar 包
maven项目pom.xml突然报错,在Java Build Path 中并没有引用的jar包出现在了Maven Dependencies的依赖包中. 这个错误直接导致了pom.xml文件中 < ...
- 【spring cloud】spring cloud打包最外层项目报错:'packaging' with value 'jar' is invalid. Aggregator projects require 'pom' as packaging. @ line 9, column 13
OK,spring cloud项目,最外层的父级项目在打包的时候,报错如下: "C:\Program Files\Java\jdk1.8.0_131\bin\java" -Dmav ...
- idea maven install 卡住,无报错排查。
今天使用idea打包,执行install,看控制台日志,卡主了(意思是日志不继续在控制台输打印了,卡主了,也看不到错误),也没有报错,然后进行排查. 进入dos命令,进入到项目的根目录,使用 运行 m ...
- 【docker】【redis】2.docker上设置redis集群---Redis Cluster部署【集群服务】【解决在docker中redis启动后,状态为Restarting,日志报错:Configured to not listen anywhere, exiting.问题】【Waiting for the cluster to join...问题】
参考地址:https://www.cnblogs.com/zhoujinyi/p/6477133.html https://www.cnblogs.com/cxbhakim/p/9151720.htm ...
- webpack 打包压缩 ES6文件报错UglifyJs + Unexpected token punc ((); 或者 Unexpected token: operator (>)
webpack 打包压缩 ES6文件报错UglifyJs + Unexpected token punc ((); 或者 Unexpected token: operator (>) 解决方案 ...
- maven 的 pom.xml 文件报错:ArtifactTransferException: Failure to transfer
因为maven下载依赖jar包时,特别慢,所以取消了下载过程,再次打开eclipse时,maven的pom.xml文件报错如下: ArtifactTransferException: Failure ...
随机推荐
- android 数据绑定(4)实用特性及疑惑:使用控件、格式化@string/xxx、对象传递、双向数据绑定
1.在布局内使用其它控件 1.1 效果 箭头所指3个控件的内容随输入框内容而变化. 1.2 示例代码 <?xml version="1.0" encoding="u ...
- centos7 RPM MySQL5.5
一.安装MYSQL 把下载好的rpm版的mysql上传到centos7中,目前公司中最爱用的是5.5版本和5.7版本,推荐用5.5. 先安装服务端 rpm -ivh MySQL-server-5.5. ...
- Macos 编译运行调试Mysql源代码
准备编译工具Clion 下载地址 工具是macos用的系统 百度云盘下载地址(密码: 7dus) 下载mysql源码 Mysql源码下载地址 下载boost boost下载地址 前期准备工作 MySQ ...
- Tomcat7.0.99集群使用Redis共享session方案
以前配置过给予多播的session共享方案,这回再配置一个redis共享session的. 先小小的炫耀一下: 相信大家要做Tomcat+Redis+session配置,遇到的头号麻烦就是编译的tom ...
- MyBatis源码流程分析
mybatis核心流程三大阶段 Mybatis的初始化 建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提 ...
- SpringBoot2 集成日志,复杂业务下的自定义实现
本文源码:GitHub·点这里 || GitEE·点这里 一.日志体系集成 1.日志管理 在系统的开发中,最关键的一个组件工具就是日志,日志打印方便问题排查,或者生产事故回溯,日志记录用来监控并分析系 ...
- Kubernetes-5:搭建企业级私有仓库Harbor
搭建企业级私有仓库Harbor 安装需求 python版本 >= 2.7 Docker引擎版本 >= 1.10 docker-compose版本 >= 1.6.0 安装环境 一.Py ...
- python基础:多进程、多线程
一.定义和区别 1.一个任务就是一个进程,进程就是资源的集合.比如打开浏览器,启动一个进程.当一个进程需要干很多事的时候,就需要执行多个子任务,这些子任务就是线程. 2.线程是包含在进程中的,每个进程 ...
- 第3课 - makefile伪目标的引入
第3课 - makefile伪目标的引入 1. makefile 中的目标究竟是什么? (1)默认情况下,make 认为目标对应着一个文件 ==> 目标即文件名 (2)make 首先会检测目 ...
- [Leetcode]148. 排序链表(归并排序)
题目 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4 示例 2: ...