背景

        打的jar包很大

           很多时候我们在开发的时候,maven的依赖包非常多,导致我们最后打的一个jar包有一百多MB,需要将包上传到liunx环境耗时非常久,很多时候我们并没有改变依赖包,而只是改变我们的逻辑代码,结果重新上传包的时候,这些依赖包需要重新上传一次,费时费力。

        抽取配置文件

          有时候我们将jar包上传linux环境,发现jar包依赖的配置文件(例如:application.yml)需要修改,最不好的一种方式是线下idea重新修改配置,重新打包上传,折中的一种方式是直接 vim jar包,找到配置文件,修改jar包里面的配置文件,保存退出,然后重启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>

效果展示:

maven 查看打包日志 maven 打包 配置文件在外_maven 查看打包日志

maven 查看打包日志 maven 打包 配置文件在外_linux_02

maven 查看打包日志 maven 打包 配置文件在外_大数据_03

 

maven 查看打包日志 maven 打包 配置文件在外_大数据_04