很多时候我们在开发的时候,maven的依赖包非常多,导致我们最后打的一个jar包有一百多MB,需要将包上传到liunx环境耗时非常久,很多时候我们并没有改变依赖包,而只是改变我们的逻辑代码,结果重新上传包的时候,这些依赖包需要重新上传一次,费时费力。
有时候我们将jar包上传linux环境,发现jar包依赖的配置文件(例如:application.yml)需要修改,最不好的一种方式是线下idea重新修改配置,重新打包上传,折中的一种方式是直接 vim jar包,找到配置文件,修改jar包里面的配置文件,保存退出,然后重启jar包,但是这种方式也比较麻烦。
可以使用maven插件来将 项目所有的依赖包 和 配置文件 抽取到要打的jar包的外面,这样我们的一个jar包就只有 几十kb 大小,如果不涉及到更改依赖的话,上传这样一个包是非常方便的。
因为jar包依赖的配置文件现在都在jar包的外面,所以只需要在jar包外面修改配置文件,然后重启jar包就可以生效了
- <plugins>
- <!-- 下面这些插件可以让你打一个很小的jar包 -->
- <!-- 所有的配置文件都抽取到了 ../conf 目录中 -->
- <!-- 所有的依赖包都抽取到了 dependencyJars 目录中 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration>
- <!-- 项目resource下的以下几种目录配置文件都不打入jar包 -->
- <excludes>
- <exclude>bin/**</exclude>
- <exclude>config/**</exclude>
- <exclude>static/**</exclude>
- <exclude>templates/**</exclude>
- <exclude>*.yml</exclude>
- <exclude>*.xml</exclude>
- </excludes>
-
- <archive>
- <manifest>
- <addClasspath>true</addClasspath>
- <!--MANIFEST.MF 中 Class-Path 加入前缀,不需要配置,在外部命令行指定-->
- <classpathPrefix>dependencyJars/</classpathPrefix>
- <!-- jar包不包含唯一版本标识 -->
- <useUniqueVersions>false</useUniqueVersions>
- <!--指定入口类,如果程序里只有一个main方法就建议不要手动配置-->
- <mainClass>com.test.Main</mainClass>
- </manifest>
- <manifestEntries>
- <Class-Path>../conf/</Class-Path>
- </manifestEntries>
- </archive>
- <outputDirectory>${project.build.directory}</outputDirectory>
- </configuration>
- </plugin>
-
- <!--拷贝依赖 copy-dependencies -->
- <!-- 所有的依赖包都被拷贝到 dependencyJars 目录中 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-dependencies</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <outputDirectory>${project.build.directory}/dependencyJars/</outputDirectory>
- <overWriteReleases>false</overWriteReleases>
- <overWriteSnapshots>false</overWriteSnapshots>
- <overWriteIfNewer>true</overWriteIfNewer>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- <!--拷贝资源文件 copy-resources -->
- <!-- 所有的配置文件拷贝到 ../conf 目录中 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-resources</id>
- <phase>package</phase>
- <goals>
- <goal>copy-resources</goal>
- </goals>
- <configuration>
- <encoding>UTF-8</encoding>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <outputDirectory>${project.build.directory}/../conf</outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- <!-- 打包发布时,跳过单元测试 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <skipTests>true</skipTests>
- </configuration>
- </plugin>
-
- <!-- 删除打包出来的文件 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-clean-plugin</artifactId>
- <configuration>
- <filesets>
- <fileset>
- <directory>${basedir}/conf</directory>
- </fileset>
- <fileset>
- <directory>${basedir}/dependencyJars</directory>
- </fileset>
- </filesets>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>8</source>
- <target>8</target>
- </configuration>
- </plugin>
- </plugins>


