• idea 项目代码打包为jar包详解


    前言

    假设我有如下简单 maven 项目
    在这里插入图片描述

    点击 File ==> Project Structure ==> Artifacts ==> 点击加号 ==> 选择JAR ==> 选择From modules with dependencies

    在这里插入图片描述

    一、将所有依赖和模块代码打包为一个jar

    如果你想把所有项目依赖的其他库和代码打成一个 jar,可以选择extract to the target JAR 。比如如果你项目里依赖了 fastjson.jar 等第三方 jar,可以把这些第三方 jar 也打到最终生成的 jar 里面。

    1.先选择你要打包的模块和启动类,然后选择extract to the target JAR ,点击ok

    在这里插入图片描述

    2.确认要生成的 jar 名称(默认是项目或模块名),确认 jar 包的输出的目录,确认最终输出的 jar 里包含的依赖(我这里包含了14个其他依赖和项目代码,如果不想包含第三方依赖可以选中相关依赖点击减号进行排除),点击 Apply 和 Ok

    在这里插入图片描述

    3 . 点击 Build ==> Build Artifacts

    在这里插入图片描述

    先点击 clear 进行清除,然后再点击 Build 进行构建,就可以打成一个jar包了
    (如果不点击 clear 进行清理上次的构建,直接点击Build 进行构建的话,可能会把上次构建的东西打进去导致 jar 包变得比较大)

    在这里插入图片描述
    在这里插入图片描述

    4.构建打包提示成功后就可以在输出目录里找到打好的 jar 包了

    在这里插入图片描述

    二、只将模块代码打包为一个jar

    如果你不想把所有项目依赖的其他库和代码都打成一个 jar,可以选择copy to the output directory and link via manifest 。比如,如果你项目里依赖了 fastjson.jar 等第三方 jar,这些第三方 jar 不会被打到最终生成的jar里面,只会把这些依赖的 jar 和最终生成的 jar 输出到一个目录下。

    1.先选择你要打包的模块和启动类,然后选择copy to the output directory and link via manifest ,点击ok

    在这里插入图片描述

    2.确认要生成的 jar 名称(默认是项目或模块名),确认 jar 包的输出的目录,确认项目使用到的依赖,点击 Apply 和 Ok

    在这里插入图片描述

    3.点击 Build ==> Build Artifacts

    -在这里插入图片描述

    先点击 clear 进行清除,然后再点击 Build 进行构建,就可以打成一个 jar 包了
    (如果不点击 clear 进行清理上次的构建,直接点击Build 进行构建的话,可能会把上次构建的东西打进去导致 jar 包变得比较大)

    在这里插入图片描述
    在这里插入图片描述

    4.构建打包提示成功后就可以在输出目录里找到打好的 jar 包了,另外项目依赖的其他 jar 包也会输出到这个目录

    在这里插入图片描述

    三、其他方法打包

    上面的方式是使用 idea 来打包,如果你使用的是 maven 项目,你也可以使用其他插件来打包。

    1.使用 spring-boot-maven-plugin 插件打包

    在 pom.xml 中的 build 标签下的 plugins 标签下加入如下配置:

                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                    <version>2.6.0version>
                    <configuration>
                        <mainClass>com.xtool.manager.MainDemomainClass>
                        <finalName>XToolfinalName>
    					 <includes>
                                <include>
                                    <groupId>nothinggroupId>
                                    <artifactId>nothingartifactId>
                                include>
                         includes>
                    configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackagegoal>
                            goals>
                        execution>
                    executions>
                plugin>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    说明:

    1. mainClass 标签里是你的项目的启动类的包路径,如果你的项目没有有启动类也不需要通过 java -jar 运行的话可以删除 mainClass
    2. finalName 标签里的就是打出来的 jar 名,我这里是 XTool ,最终生成的就是 XTool.jar 。若不使用 finalName 指定,则打包生成的 jar 包名默认使用 pom.xml 文件里 artifactId 标签和 version 标签里的值作为 jar 的名。
    3. 如果你希望最终生成的 jar 包不包含第三方依赖那直接用上面的插件配置即可。如果希望最终生成的 jar 包里包含第三方依赖那就删除 includes 标签及其里面的内容

    在 idea 右边侧边栏的 Maven 选项卡里点击 Lifecyle 下的 package 就可以开始打包了

    在这里插入图片描述

    最终生成的 jar 包就在 target 目录下

    在这里插入图片描述

    2.其他插件打包

    除了上面的插件可以打包,还有maven-dependency-plugin、maven-shade-plugin、maven-assembly-plugin等插件也可以打包,这里就不再介绍了,感兴趣可以看下这篇文章:How to Create an Executable JAR with Maven

  • 相关阅读:
    DTSE Tech Talk 第13期:Serverless凭什么被誉为未来云计算范式?
    华纳云:远程桌面服务器出现乱码是什么原因?
    k8s手动下载镜像、通过容器创建镜像方法
    Banana Pi BPI-W3 ArmSoM-W3之RK3588-MIPI-DSI屏幕调试笔记
    JavaScript:隐式转换、显示转换、隐式操作、显示操作
    教程图文详解 - 数据通信基础(第二章)
    JVS应用中心
    90分工作60分汇报!不会写报告,干再多活领导都看不见!(附模板)
    STM32F4_HAL库_串口阻塞/中断/DMA三种方式发送数据的配置
    MyBatis流程以及套路
  • 原文地址:https://blog.csdn.net/qq_33697094/article/details/128034083