文章目录
一、简介
昨天和项目组一位经验丰富的高手讨论,针对现场远程维护和部署非常不方便,且打包后很容易超过100兆的问题请教了。 问题的根源在于:有时候只改一点点东西,却必须把包含所有依赖的jar包发到现场去替换,非常麻烦、不方便。
所以我学到了一些新东西。 我花时间浏览了网上的资料,结合工作中的实际使用场景,整理了本文的内容,以便以后随时可以使用。
二、正文
我之前一直使用默认的-boot-maven-进行初始化来构建项目并打包项目。 这个插件会把项目的所有依赖都放到BOOT-INF/lib中,这就导致jar包非常臃肿,尤其是当子项目有几十个的时候,整个项目的体积可想而知。 然而,项目之间存在非常常见的依赖关系,因此分离包是有意义的。
本文还是在前两个项目上进行测试。 毕竟只是改变了pom文件中build标签下的插件内容。
有兴趣的可以阅读:集成新版本-Plus代码生成器,集成替换。
1.整个项目的目录结构
2.系统环境变量配置
3.pom文件配置——本文的重点,其他部分根本不用看
pom中几乎所有的配置项都有详细的注释,说明每个属性的作用以及如何配置。 请根据实际项目进行配置。
<properties>
<output.dependence.file.path>lib/output.dependence.file.path>
<output.jar.file.path>bin/output.jar.file.path>
<output.resource.file.path>config/output.resource.file.path>
properties>
啰嗦了,在下面的配置中,你会看到有一个.../的相对路径配置,其实很简单,只要抓住一点,一切都是从最终的jar包开始的,考虑如何为了使它找到依赖于文件的库和配置。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-jar-pluginartifactId>
<configuration>
<outputDirectory>${env.LEARN_HOME}/${output.jar.file.path}outputDirectory>
<excludes>
<exclude>*.propertiesexclude>
<exclude>*.ymlexclude>
<exclude>*.xmlexclude>
<exclude>*.txtexclude>
excludes>
<archive>
<addMavenDescriptor>trueaddMavenDescriptor>
<manifest>
<useUniqueVersions>falseuseUniqueVersions>
<addClasspath>trueaddClasspath>
<classpathPrefix>../${output.dependence.file.path}classpathPrefix>
<mainClass>com.ieslab.knife4j.demo.DemoApplicationmainClass>
manifest>
<manifestEntries>
<Class-Path>../${output.resource.file.path}Class-Path>
manifestEntries>
archive>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-dependency-pluginartifactId>
<executions>
<execution>
<id>copy-dependenciesid>
<phase>packagephase>
<goals>
<goal>copy-dependenciesgoal>
goals>
<configuration>
<outputDirectory>${env.LEARN_HOME}/${output.dependence.file.path}outputDirectory>
<excludeTransitive>falseexcludeTransitive>
<stripVersion>falsestripVersion>
configuration>
execution>
executions>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-resources-pluginartifactId>
<executions>
<execution>
<id>copy-resourcesid>
<phase>packagephase>
<goals>
<goal>copy-resourcesgoal>
goals>
<configuration>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<includes>
<exclude>*.propertiesexclude>
<exclude>*.ymlexclude>
<exclude>*.xmlexclude>
<exclude>*.txtexclude>
includes>
resource>
resources>
<outputDirectory>${env.LEARN_HOME}/${output.resource.file.path}outputDirectory>
configuration>
execution>
executions>
plugin>
plugins>
build>
4. 包装
首先,打包时点击右上角的闪电图标可以“跳过测试模式”。 然后双击执行clean和命令分别进行清理和打包。
打包成功:
打包完成后,我们去输出目录看一下:
5.测试,测试依赖前两篇文章构建的测试项,当然这个不重要
进入bin目录:地址栏输入cmd回车
启动项目:java -jar demo-1.0.0.jar
启动成功:
在浏览器中输入地址进行验证:
三、总结
这篇文章有很多关于分离和包装的内容。 如果你有兴趣,可以尝试一下。
当然,还有很多不足之处需要探讨。 比如所有的配置文件都输出到该目录下,如果项目很多怎么办? 是不是应该考虑到目录下,每个子项目都有一个独立的目录? 以及整个项目的公共配置如何处理? 不可能为每个项目维护一个公共配置信息。 如果修改需要修改很多地方,如何解决?
下次见。