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

  • 相关阅读:
    《.NET深入体验与实战精要》读书体会
    为什么周易中有64卦?
    16进制与8进制之间的快速转码
    3种夸克有多少组合?
    分辨率宽高和为整千?
    abt DVD
    为什么有20种氨基酸?
    HD与BD次时代之战!
    [转载]Java一些基础问题
    [转载]Java环境变量配置
  • 原文地址:https://www.cnblogs.com/adingfirstlove/p/13791549.html
Copyright © 2020-2023  润新知