当前位置: 首页 > 工具软件 > LibreSource > 使用案例 >

springboot打包分离lib和resource

束福
2023-12-01

打包后的目录结构

target/output/

--- lib/                    /*存放所有依赖jar包,包括子模块打成的jar包*/

--- resource/        /*存放资源文件,yml 、properties、xml等*/

--- demo-0.0.1-SNAPSHOT.jar

配置:

  1. maven-jar-plugin:负责打包、排除lib和资源文件,把外部目录加入classpath中,指定主类入口
  2. maven-dependency-plugin:负责拷贝依赖jar包到外部lib目录
  3. maven-resources-plugin:负责拷贝资源文件到外部resource目录
  4. 不需要spring-boot-maven-plugin插件

注意:

用maven-resources-plugin拷贝资源文件到外部,而maven-jar-plugin从jar中排除文件。如果排除文件规则写的不完善,可能造成文件重复。

打包后可用压缩软件查看jar中的文件和resource中是否有重复,如果有重复则删除其一即可。

示例:

修改maven-jar-plugin中的主类和所需排除文件后,可直接使用

<build>
    <plugins>
        <!--打jar包,排除资源文件和依赖jar,同时外部的lib、resource目录加入到classpath中,
            用命令java -jar运行jar时就不需要用-Dloader.path指定外部资源路径了!
            不需要spring-boot-maven-plugin插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <!--MANIFEST.MF 中 Class-Path 加入前缀!用命令java -jar运行jar时就不用-Dloader.path指定外部资源路径了-->
                        <classpathPrefix>lib/</classpathPrefix>
                        <!--jar包名字是否包含唯一版本标识-->
                        <useUniqueVersions>false</useUniqueVersions>
                        <!--指定含main方法的主类入口-->
                        <mainClass>com.xx.yy.DemoApplication</mainClass>
                    </manifest>
                    <manifestEntries>
                        <!--MANIFEST.MF 中 Class-Path 加入资源文件目录!用命令java -jar时就不用-Dloader.path指定外部资源路径了 -->
                        <Class-Path>resources/</Class-Path>
                    </manifestEntries>
                </archive>
                <!-- 打包时从jar包里排除资源文件 -->
                <excludes>
                    <exclude>*.yml</exclude>
                    <exclude>*.properties</exclude>
                    <exclude>mapper/*.xml</exclude>
                </excludes>
                <!-- 指定项目打成jar包输出位置 -->
                <outputDirectory>${project.build.directory}/output</outputDirectory>
            </configuration>
        </plugin>

        <!-- 拷贝依赖jar包!插件maven-jar-plugin只是打包排除文件,
            而把依赖jar包拷贝到外部lib目录就需要maven-dependency-plugin插件 -->
        <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}/output/lib/</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!--拷贝资源文件! 插件maven-jar-plugin只负责打包时排除文件,
            而把资源文件拷贝到外部resource目录就需要maven-dependency-plugin插件-->
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <resources>
                            <resource>
                                <!--拷贝此目录下的所有文件到指定的外部目录。只负责拷贝,而不是从jar包中排除!-->
                                <directory>src/main/resources</directory>
                            </resource>
                        </resources>
                        <!-- 把“<resource><directory>”指定目录中的文件输出到此处指定目录 -->
                        <outputDirectory>${project.build.directory}/output/resources</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>

 

 类似资料: