使用maven打生产环境可执行包

news2024/9/23 11:51:17

一、程序为什么要打包

程序打包的主要目的是将项目的源代码、依赖库和其他资源打包成一个可执行的文件或者部署包,方便程序的发布和部署。以下是一些打包程序的重要理由:

  1. 方便部署和分发:打包后的程序可以作为一个独立的实体,方便复制和部署到不同的环境中,包括开发、测试和生产环境。打包后的程序通常包含了所有需要的依赖和配置,并且已经做好了预处理(如编译、压缩、优化等),减少了部署和配置的复杂性。

  2. 保护源代码:打包后的程序通常会将源代码进行编译和打包,以二进制形式进行发布。这样可以保护源代码的安全性,防止他人对源代码的篡改。

  3. 管理依赖关系:在打包过程中,Maven 或其他构建工具可以自动将项目所需的依赖库打包到最终的可执行文件中。这样可以简化项目的依赖管理,减少对外部库和组件的依赖,提高了项目的独立性和可移植性。

二,使用maven打包java程序

maven内置很多插件,可以非常方便打包。

2.1使用maven-resources-plugin管理资源

maven-resources-plugin插件负责复制过滤资源文件到制定目录。程序项目的配置可分为两种,一种是静态配置,用于程序内部,即使重复部署也无需改动,比如log4j,定时任务配置quartz等。另外一种是动态配置,用于运维部署动态调整的。

2.1.1maven处理静态资源

maven对于静态资源,一般无需额外处理。我们可以把静态资源放置在maven项目的src/main/resources目录。程序打包的时候就会默认处理。

2.1.2maven处理动态资源

对于动态资源,我们一般会在程序源代码的同级目录新增一个文件夹,例如叫做config,用来放置所有的动态资源。典型的动态有数据库配置jdbc,socket配置等等。如果同样一份代码,需要在很多机器部署,例如,游戏服务器往往有好几千个游戏区,每个游戏区的代码都是一样的,只是动态资源不一样。运维在部署的时候,只需要修改动态配置。还可以使用诸如ansible之类自动化运维工具,做到一键部署全部服务器。

例如jforgame,把动态资源放置在config文件,如下所示:

maven-resources-plugin插件配置,把config配置全部拷贝到jar包输出目录。

 <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <!-- 配置文件要跟jar包在同一个目录 -->
                        <id>copy-config</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/configs</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>configs/</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

2.2使用maven-dependency-plugin复制依赖

程序在部署的时候一般采用“瘦客户端”模式,可执行包内部只包含业务代码,不包含第三方依赖。这样可以减小目标包的体积(第三方依赖一般不变,只在初次部署使用),加快启动速度。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-jars</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/libs</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

2.3使用maven-jar-plugin打可执行包

前面两个插件都是处理资源的,这个插件才是真正将代码进行打包的,我们先来通过配置进行说明。

  <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <Class-Path>configs/</Class-Path>
                        </manifestEntries>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>libs/</classpathPrefix>
                            <mainClass>jforgame.demo.ServerStartup</mainClass>
                        </manifest>
                    </archive>
                </configuration>
  </plugin>

<mainClass>作用:申明jar包启动类

<Class-Path>作用:把自定义的config动态配置文件夹添加到MANIFEST.MF的Class-Path标签。

<addClasspath>+<classpathPrefix>作用:把maven-dependency-plugin引入的libs下所有第三方依赖统一添加到MANIFEST.MF的Class-Path标签。相关配置放在MANIFEST.MF文件(用rar程序打开目标包)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1518146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何布局马斯克推特上喊的meme币赛道

2024年的牛市正如火如荼的开展&#xff0c;截止当下&#xff0c;比特币已经站上了7.3万美元&#xff0c;远超2021年高点的6.9万美元&#xff0c;比特币的未来是一片大海。 除了比特币的一枝独秀之外&#xff0c;meme板块可以说是市场资金最青睐的。尤其是马斯克在X分享PEPE相关…

windows 免密码ssh登录linux;linux免密码ssh登录其他linux

1、windows 免密码ssh登录linux 参考&#xff1a;https://blog.csdn.net/qq285744011/article/details/118293937 1&#xff09;windows先生成公钥私钥 ssh-keygen -t rsa -C "你的邮箱地址"生成后放在用户命令.ssh文件下 2&#xff09;把公钥复制到linux /root/…

Sibelius打谱软件2024基础版适合新手小白使用

Sibelius 2024是一款在音乐领域广受欢迎的乐谱制作软件&#xff0c;它为专业作曲家、编曲家、音乐教育家以及学生提供了一个全面、高效的创作平台。从乐谱安全的审查模式和激发灵感的循环回放&#xff0c;到更出色的性能和省时的工作流程&#xff0c;Sibelius | Ultimate&#…

U盘打不开怎么办?教你轻松解决数据恢复难题

一、遭遇困境&#xff1a;U盘打不开的焦虑 在日常工作和生活中&#xff0c;U盘扮演着不可或缺的角色&#xff0c;然而&#xff0c;有时我们会遇到U盘打不开的尴尬情况。当你满怀期待地插入U盘&#xff0c;却发现电脑无法识别&#xff0c;或者双击后弹出错误提示&#xff0c;那…

HTML 学习笔记(十)块和内联

每个HTML元素都有一个默认的显示值&#xff0c;显示值又可以再分为block(块)和inline(内联) 一、块元素 通过F12进入浏览器开发者模式查看该元素会发现其所占宽度为整个网页的宽度 1.div标签 通过div标签将一些元素装进"盒子"&#xff0c;从而对盒子中的全部元素…

Compose UI 之 BottomAppBar 底部应用栏

BottomAppBar 底部应用栏 BottomAppBar 是一个在 Jetpack Compose 中用于创建底部应用栏的组件。它提供了一个高度可定制且功能丰富的底部导航解决方案。 它的使用方式与 TopAppBar 类似。下面的图是 BottomAppBar 的基本样式图。 常见使用场景 BottomAppBar 在应用中常用于…

考研失败, 学点Java打小工——Day3

1 编码规范——卫语句 表达异常分支时&#xff0c;少用if-else方式。   比如成绩判断中对于非法输入的处理&#xff1a; /*>90 <100 优秀>80 <90 良好>70 <80 一般>60 <70 及格<60 不及格*/Testpu…

【大模型系列】图片生成(DDPM/VAE/StableDiffusion/ControlNet/LoRA)

文章目录 1 DDPM(UC Berkeley, 2020)1.1 如何使用DDPM生成图片1.2 如何训练网络1.3 模型原理 2 VAE:Auto-Encoding Variational Bayes(2022&#xff0c;Kingma)2.1 如何利用VAE进行图像增广2.2 如何训练VAE网络2.3 VAE原理2.3.1 Auto-Encoder2.3.2 VAE编码器2.3.3 VAE解码器 3 …

手撕HashMap底层源码 (JDK1.7版本的HashMap)

day27 集合框架 标绿已经学习底层&#xff0c;深入底层主要是研究实现类底层 手撕HashMap底层源码 JDK1.7版本的HashMap 切换版本 原因&#xff1a;jdk1.7和jdk1.8的HashMap不同&#xff08;头插法/尾插法&#xff09; 首先如果没有jdkjre1.7&#xff0c;就安装jdkjre1.7&am…

黄金期货在投资组合多样化中的作用

投资组合多样化是投资者通过持有多种不同的资产来降低风险和提高收益的一种投资策略。黄金期货是投资组合多样化中的一种选择&#xff0c;它可以为投资者提供一种在市场波动期间保持资产价值的方法。在本文中&#xff0c;我们将探讨黄金期货在投资组合多样化中的作用以及投资黄…

网站首页添加JS弹屏公告窗口教程

很多小白站长会遇到想给自己的网站添加一个弹屏公告&#xff0c;用于做活动说明、演示站提示等作用与目的。 下面直接上代码&#xff1a;&#xff08;直接复制到网页头部、底部php、HTML文件中&#xff09; <script src"https://www.mohuda.com/site/js/sweetalert.m…

中国金融统计年鉴、中国保险统计年鉴、中国人口与就业统计年鉴、国民经济和社会发展公报、中国劳动统计年鉴

数据下载链接&#xff1a;百度云下载链接 统计年鉴是指以统计图表和分析说明为主&#xff0c;通过高度密集的统计数据来全面、系统、连续地记录年度经济、社会等各方面发展情况的大型工具书来获取统计数据资料。 统计年鉴是进行各项经济、社会研究的必要前提。而借助于统计年…

JVM 面试——G1和ZGC的区别

ZGC是一款JDK 11中新加入的具有实验性质的低延迟垃圾收集器ZGC的目标主要有4个 支持TB量级的堆。我们生产环境的硬盘还没有上TB呢&#xff0c;这应该可以满足未来十年内&#xff0c;所有JAVA应用的需求了吧。最大GC停顿时间不超10ms。目前一般线上环境运行良好的JAVA应用Minor …

versal pcie/gty quad location debug

qdma的pcie 不能都放在同样的位置 pcie 和gty quad的对应关系 在nvme工程中&#xff0c; 把pcie错误的都放在x1y0&#xff1b; 工具包critical warning&#xff0c;工具自动把其中一个位置改成了x1y2 CRITICAL WARNING: [Vivado 12-2285] Cannot set LOC property of instanc…

物联网技术助力智慧城市转型升级:智能、高效、可持续

目录 一、物联网技术概述及其在智慧城市中的应用 二、物联网技术助力智慧城市转型升级的路径 1、提升城市基础设施智能化水平 2、推动公共服务智能化升级 3、促进城市治理现代化 三、物联网技术助力智慧城市转型升级的成效与展望 1、成效显著 2、展望未来 四、物联网技…

C#,数值计算,矩阵相乘的斯特拉森(Strassen’s Matrix Multiplication)分治算法与源代码

Volker Strassen 1 矩阵乘法 矩阵乘法是机器学习中最基本的运算之一,对其进行优化是多种优化的关键。通常,将两个大小为N X N的矩阵相乘需要N^3次运算。从那以后,我们在更好、更聪明的矩阵乘法算法方面取得了长足的进步。沃尔克斯特拉森于1969年首次发表了他的算法。这是第…

基于Centos7部署OceanBase4.2版本单副本集群

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

PDM产品数据管理系统、产品数据管理系统有哪些?

产品数据管理系统&#xff08;Product Data Management&#xff0c;简称PDM&#xff09;主要用于管理公司产品的各类信息&#xff0c;如品牌管理、系列管理、颜色管理以及产品生命周期等。以下是一些常见的产品数据管理系统&#xff1a; 彩虹PDM系统是一款功能强大的在线产品数…

谁有FPGA高速接口学习路线?身边的资料太少了,不知道该从哪入手?

找FPGA教程&#xff0c;FPGA项目&#xff0c;高速接口的来看 首先针对高速接口教程市面上没有完整的免费课提供&#xff0c;压根找不到.... 所以推荐&#xff1a; FPGA课程5.0 版&#xff1a;Xilinx体系高速接口项目实操&#xff0c;全新升级&#xff0c;课程完全根据企业招…

C# Onnx C2PNet 图像去雾 室内场景

目录 介绍 效果 模型信息 项目 代码 下载 C# Onnx C2PNet 图像去雾 室内场景 介绍 github地址&#xff1a;GitHub - YuZheng9/C2PNet: [CVPR 2023] Curricular Contrastive Regularization for Physics-aware Single Image Dehazing [CVPR 2023] Curricular Contrasti…