java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > maven打生产环境可执行包

maven打生产环境可执行包的实现

作者:jforgame

本文主要介绍了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程序打开目标包)。

到此这篇关于maven打生产环境可执行包的实现的文章就介绍到这了,更多相关maven打生产环境可执行包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文