主流网站建设,wordpress说明文档下载,水仙直播,wordpress过滤显示插件下载一、程序为什么要打包
程序打包的主要目的是将项目的源代码、依赖库和其他资源打包成一个可执行的文件或者部署包#xff0c;方便程序的发布和部署。以下是一些打包程序的重要理由#xff1a; 方便部署和分发#xff1a;打包后的程序可以作为一个独立的实体#xff0c;方便…一、程序为什么要打包
程序打包的主要目的是将项目的源代码、依赖库和其他资源打包成一个可执行的文件或者部署包方便程序的发布和部署。以下是一些打包程序的重要理由 方便部署和分发打包后的程序可以作为一个独立的实体方便复制和部署到不同的环境中包括开发、测试和生产环境。打包后的程序通常包含了所有需要的依赖和配置并且已经做好了预处理如编译、压缩、优化等减少了部署和配置的复杂性。 保护源代码打包后的程序通常会将源代码进行编译和打包以二进制形式进行发布。这样可以保护源代码的安全性防止他人对源代码的篡改。 管理依赖关系在打包过程中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用来放置所有的动态资源。典型的动态有数据库配置jdbcsocket配置等等。如果同样一份代码需要在很多机器部署例如游戏服务器往往有好几千个游戏区每个游戏区的代码都是一样的只是动态资源不一样。运维在部署的时候只需要修改动态配置。还可以使用诸如ansible之类自动化运维工具做到一键部署全部服务器。
例如jforgame把动态资源放置在config文件如下所示 maven-resources-plugin插件配置把config配置全部拷贝到jar包输出目录。 pluginartifactIdmaven-resources-plugin/artifactIdversion2.6/versionexecutionsexecution!-- 配置文件要跟jar包在同一个目录 --idcopy-config/idphasepackage/phasegoalsgoalcopy-resources/goal/goalsconfigurationoutputDirectory${project.build.directory}/configs/outputDirectoryresourcesresourcedirectoryconfigs//directory/resource/resources/configuration/execution/executions/plugin
2.2使用maven-dependency-plugin复制依赖
程序在部署的时候一般采用“瘦客户端”模式可执行包内部只包含业务代码不包含第三方依赖。这样可以减小目标包的体积第三方依赖一般不变只在初次部署使用加快启动速度。 plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-dependency-plugin/artifactIdexecutionsexecutionidcopy-jars/idphasepackage/phasegoalsgoalcopy-dependencies/goal/goalsconfigurationoutputDirectory${project.build.directory}/libs/outputDirectory/configuration/execution/executions/plugin
2.3使用maven-jar-plugin打可执行包
前面两个插件都是处理资源的这个插件才是真正将代码进行打包的我们先来通过配置进行说明。 plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion3.1.0/versionconfigurationarchivemanifestEntriesClass-Pathconfigs//Class-Path/manifestEntriesmanifestaddClasspathtrue/addClasspathclasspathPrefixlibs//classpathPrefixmainClassjforgame.demo.ServerStartup/mainClass/manifest/archive/configuration/plugin
mainClass作用申明jar包启动类
Class-Path作用把自定义的config动态配置文件夹添加到MANIFEST.MF的Class-Path标签。
addClasspathclasspathPrefix作用把maven-dependency-plugin引入的libs下所有第三方依赖统一添加到MANIFEST.MF的Class-Path标签。相关配置放在MANIFEST.MF文件用rar程序打开目标包。