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打包下载即可。

 

posted @ 2020-10-10 11:31  流浪阿丁  阅读(4438)  评论(0编辑  收藏  举报