springboot多模块项目(微服务项目)正确打包(jar)方式

2023-10-29

大致步骤

  1. 新建一个springboot项目名称为父亲

  2. 添加父快捷方式。新建子模块,子模块同时插入新建springboot的项目,依次创建enty和web模块(关键是并配置好pom文件)

  3. web模块依赖于entiy模块中的实体类,创建测试控制器,先测试项目没问题再开始打包(jar)

  4. 开始打包

  5. 测试jar是否有用

创建项目

注意点 :子模块需要保留xx.iml,xx.mvn文件,父模块保留.idea,.mvn文件 。如果删除了这些可能会报发现主类的错误
要打包项目大致的目录结构如下 :
第一级别:father
第二级别:service、web、entiy
第三级别:eduService
其中web、eduService是web项目可以独立运行,且依赖entiy( 学会了这个,以后所有的多模块项目都能学会打包(jar)
在这里插入图片描述

配置父亲的pom文件

配置父模块注意点一: 修改打包为pom(一般父级的打包方式为pom,所以father、service的打包方式为pom)。

 <packaging>pom</packaging>

配置父模块注意点二: 记得指定该父模块下面有哪些子模块

 <modules>
        <module>entiy</module>
        <module>web</module>
        <module>service</module>
    </modules>

配置父模块注意点三: 记得指定java的版本号

  <properties>
        <java.version>1.8</java.version>
    </properties>     

配置父模块注意点四: 只需在father配置apache的maven打包插件,service的其他父模块不需要配置这个

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <skipTests>true</skipTests>    <!--默认关掉单元测试 -->
                </configuration>
            </plugin>
        </plugins>
    </build>

完整father的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.4.0</version>
    </parent>
    <modules>
        <module>entiy</module>
        <module>web</module>
        <module>service</module>
    </modules>
    <groupId>com.zzh</groupId>
    <artifactId>father</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>father</name>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <skipTests>true</skipTests>    <!--默认关掉单元测试 -->
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

配置子模块的pom文件

配置子模块注意点一 : 在parent节点下面加上relativePath,作用是指明依赖哪个父模块pom文件(如果是依赖直接父级就是…/规则和写html那种引用绝对路径一样)。

<relativePath>../pom.xml</relativePath>

配置子模块注意点二 : 修改打包方式为jar

<packaging>jar</packaging>

配置子模块注意点三 : 加上springBoot的maven打包插件,并且指定运行的主入口类(springboot的maven插件,用这个插件打包的Jar包可以直接运行,但是不可依赖!,如果此子模块需要被依赖,那么还需加上这句代码(不加会报找不到类的错误)。entiy模块需要加,其他子模块不要加
感谢大佬的文章

<classifier>exec</classifier>
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                     <classifier>exec</classifier>
                    <!-- 指定该Main Class为全局的唯一入口 -->
                    <mainClass>com.zzh.demo.EntiyApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

配置子模块注意点四 : 指定以下bulid的编码规则

 <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

完整的web模块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.4.0</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zzh</groupId>
    <artifactId>web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>web</name>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.zzh</groupId>
            <artifactId>entiy</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定该Main Class为全局的唯一入口 -->
                    <mainClass>com.zzh.demo.WebApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

完整的eduService模块pom文件(由于service中配置了springboot的打包插件,由于可以依赖传递,这里可以不用配置打包插件)

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>service</artifactId>
        <groupId>com.zzh</groupId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>eduService</artifactId>
    <packaging>jar</packaging>
    <name>eduService</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
</project>

编写测试代码

entiy模块
编写entiyTest类,并且自己调用自己的entiyTest

public class entiyTest {
    public void showEntiyTest() {
        System.out.println("调用showEntiyTest成功!!");
    }
}
@RestController
@RequestMapping("/entiy")
public class entiyController {
    @RequestMapping("/test")
    public String testEntiy() {
        System.out.println("entiySucess");
        return "entiySucess";
    }
}

在这里插入图片描述

web模块(前提:我们引入了entiy模块的)

@RestController
@RequestMapping("/web")
public class controller {
    @RequestMapping("/test")
    public String testWeb() {
        entiyTest entiyTest = new entiyTest();
        entiyTest.showEntiyTest();
        return "webSucess";
    }
}

在这里插入图片描述

eduService模块(前提:我们引入了entiy模块的)

@RestController
@RequestMapping("/eduService")
public class controller {
    @RequestMapping("/test")
    public String testWeb() {
        entiyTest entiyTest = new entiyTest();
        entiyTest.showEntiyTest();
        return "eduService";
    }
}

在这里插入图片描述

终极打包了

直接点clean接着点package或者install一键打包就ok了?
在这里插入图片描述
然后你会发现你会报这个错哈哈哈哈哈哈
在这里插入图片描述
解决办法,点一下这个在clean、package(maven的编译打包检查:关闭点一下就可以了,忽略检查测试文件
可以参考这个文章
在这里插入图片描述
这下就真的打包成功啦开心吧哈哈哈。输入java -jar 然后按tab键就可以切换jar包名字

在这里插入图片描述
全部启动okk了,注意启动entiy模块的这个jar包,这个才是可执行的jar包另外一个是可依赖的jar包

在需要对外提供依赖的项目的pom里设置(如本项目的xxx-a、xxx-b),这样设置会让项目生成两个jar:一个可执行jar,一个可依赖的jar;

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 生成可执行的jar的名字:xxx-exec.jar -->
                <!-- 不固定,写成abcd都可以 -->
                <classifier>exec</classifier>
            </configuration>
        </plugin>
    </plugins>
</build>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
项目源码链接,点个start吧老妹们哈哈哈哈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot多模块项目(微服务项目)正确打包(jar)方式 的相关文章

随机推荐

  • ‘mkvirtualenv‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    问题 mkvirtualenv 不是内部或外部命令 也不是可运行的程序 或批处理文件 或者 mkvirtualenv 无法将 mkvirtualenv 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如果包括路径
  • 华为HCIP云计算考证心得

    华为认证是社会认证中一种 现在很多公司也比较看重这个的 有的公司还会根据你考取证书的等级高低有工资加成 透露下我之前所在的公司 是华为的合作伙伴 就是华为代理公司把 持有HCIP证书可有每月有500的加成 IE的话1000 当然不同的公司也
  • php实现抽奖

    不啰嗦 直接上代码
  • Unity 轻量级对象池管理器(上)

    参考 https www jianshu com p 144181beab79 完整代码请跳转至 Unity 轻量级对象池管理器 下 一 前言 很多时候 你都要考虑一个问题 就是到底是牺牲时间换空间 还是牺牲空间换时间 特别是在资源紧缺的那
  • 前后端分离项目打包上传服务器

    前后端分离项目打包上传服务器 项目环境 前端项目打包 npm run build 后端项目打包 xshell和xftp 项目环境 本次项目前端使用的是vue 后端使用spring boot 分别使用的编辑器是vs code和ide 前端项目
  • Failed to load resource: the server responded with a status of 500 ()

    文章目录 前提 解决思路 心得 前提 1 最近在写SSM博客项目 基于jsp编写的 跟着视频敲 直接运行已经给好的资料 在登录验证的时候 发现页面加载半天 如下图 2 于是就盲目的去比对是不是自己复制的代码有问题 然后就一行行的比对 这犯了
  • Linux中磁盘分区的具体步骤

    磁盘分区是在Linux操作系统中重要的任务之一 通过分区可以让我们更好地管理磁盘空间 并更好地使用磁盘来存储数据和程序 在这篇博客里 我将向大家介绍如何在Linux中进行磁盘分区的实战步骤 步骤一 打开终端 首先 我们需要打开终端 在终端中
  • Linux系统巡检项及详细巡检方法与解决方案

    一 背景 1 开发脚本实现OS配置参数巡检 2 推动监控系统发布OS巡检插件 3 利用监控数据形成报表 二 巡检项整改方案解析 1 检查僵尸进程 此项检查项是检查主机系统是否存在D状态的进程 D是一种不可中断的sleep 如果发现D状态并且
  • [React Hooks 翻译] 3-8 State Hook

    示例 等价的class组件 使用class实现一个计数器 你可能会这么写 class Example extends React Component constructor props super props this state coun
  • 微信公众号 几种移动端UI框架介绍

    微信公众号 几种移动端UI框架介绍 微信公众号开发 主要是移动端网页的页面开发 在这里推荐3个移动端UI框架 WeUI SUI和Mint UI 1 WeUI 1 1 WeUI WeUI是微信官方设计团队为微信 Web 开发量身设计 可以令用
  • 从RecyclerView、NestedScrollView源码分析嵌套滑动异常

    一 显示不全 自动滚动异常 NestedScrollView嵌套RecyclerView时 有2个问题 1 RecyclerView数据加载完成后 会自动滚动到第一个itemView的位置上 导致RecyclerView上面的布局不显示 2
  • 处理 Java 异常时应避免的 7 个常见错误

    处理异常是最常见但不一定是最简单的任务之一 它仍然是经验丰富的团队中经常讨论的话题之一 并且我们应该了解一些最佳实践和常见错误 以下是在处理应用程序中的异常时应避免的几个错误 错误 1 指定一个 java lang Exception 或
  • uwb定位上位机定位源码流程分析

    主要用到的文件有两个 1 SerialConnection cpp 负责串口初始化相关内容 2 RTLSClient cpp 负责解算标签坐标并发送给上位机 3 trilateration cpp 解算坐标数学原理 1 先执行 函数 voi
  • 斐波那契额数列

    斐波那契额数列 文章目录 斐波那契额数列 前言 一 迭代法 二 公式法估算 三 矩阵快速幂加高精度 完 前言 采用三种方法求斐波那契数列 迭代法 公式法 矩阵快速幂加高精度 偷偷告诉你 可以精确求到一万位斐波那契数 一 迭代法 includ
  • 网络剪枝(1)

    论文名 Learning Efficient Convolutional Networks through Network Slimming 本文主题 Network Slimming 1 剪枝的三种意义 re duce the model
  • 串口通信----串口接收框接收不到数据

    在进行串口调试时 数据发送没有问题 但是其他串口给该串口发送数据时 接收框始终接收不到数据 也不提示错误 感觉接收函数不起作用 对照之前没有问题的串口程序 发现只有这部分没有添加进去 其他都是一样的 问题应该在这里 添加进去后 正常接收了
  • 面试官提问js篇3:js中 0.1 + 0.2 为什么不等于0.3?怎么才能等于0.3?

    一 js中 0 1 0 2 为什么不等于0 3 因为浮点数运算的精度问题 在计算机运行过程中 需要将数据转化成二进制 然后再进行计算 js中的Number类型遵循IEEE754标准 在IEEE754标准的64位浮点数相加 因为浮点数自身小数
  • RocketMq的控制台安装以及RocketMqTemplate的使用

    跟别的mq一样 RocketMq也有自己的控制台 本章讲解控制台的安装以及在实际开发中RocketMq的使用 1 RocketMq控制台安装 首先进入github中RocketMq控制台的源码中 添加链接描述 将其下载下来 如图 可以直接通
  • 什么是服务器虚拟化?

    虚拟化就解决了这个问题 将多台服务器整合到一台服务器中 运行多个虚拟环境 最终将节省物理空间 另一个问题就是 计算机网络变得越来越大 同时也越来越复杂 服务器会占用宝贵的空间 这叶就是为何数据中心会为散热而烦恼 若将一个服物理务器划分多个虚
  • springboot多模块项目(微服务项目)正确打包(jar)方式

    大致步骤 新建一个springboot项目名称为父亲 添加父快捷方式 新建子模块 子模块同时插入新建springboot的项目 依次创建enty和web模块 关键是并配置好pom文件 web模块依赖于entiy模块中的实体类 创建测试控制器