文档章节

springboot2.0 maven打包分离lib,resources

陈俊凯
 陈俊凯
发布于 09/19 02:31
字数 541
阅读 104
收藏 10

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为

1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路径,是可以正常读取的,因为文件确实存在。

2、而打包成jar以后,实际上文件是存在于jar这个文件里面的资源文件,在磁盘是没有真实路径的(\BOOT-INF\classes!test/test.json )。所以通过ResourceUtils.getFile或者this.getClass().getResource("")方法无法正确获取文件。

其中的解决方案之一就是将resources文件夹下的文件分离出来,maven打包代码配置如下:

 

<build>
    <finalName>api</finalName>
    <plugins>
        <!-- 分离lib -->
        <plugin>
            <!--这个插件就是把依赖的jar包复制出来放到编译后的target/lib目录,并且在打包时候排除内部依赖-->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </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>
                                <directory>src/main/resources</directory>
                            </resource>
                        </resources>
                        <outputDirectory>${project.build.directory}/resources</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!--打包jar-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <!-- 指定资源文件目录,与打包的jar文件同级目录 -->
                    <manifestEntries>
                        <Class-Path>resources/</Class-Path>
                    </manifestEntries>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.wangzhuan.api.ApiApplication</mainClass>
                    </manifest>
                </archive>
                <!-- 打包时忽略的文件(也就是不打进jar包里的文件),本例将resources下的.yml、.xml、.db文件全部排除 -->
                <excludes>
                    <exclude>**/*.yml</exclude>
                    <exclude>**/*.xml</exclude>
                    <exclude>**/*.db</exclude>
                </excludes>
            </configuration>
        </plugin>
        <!-- spring boot repackage -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <layout>ZIP</layout>
                <includes>
                    <include>
                        <groupId>non-exists</groupId>
                        <artifactId>non-exists</artifactId>
                    </include>
                </includes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

© 著作权归作者所有

陈俊凯
粉丝 5
博文 61
码字总数 33848
作品 0
厦门
私信 提问
Springboot 打jar包分离lib,配置文件正确方式(二)

Springboot 打jar包分离lib,配置文件正确方式(二) 背景 从《Springboot 打jar包分离lib,配置文件正确方式》中,可以达到把配置文件和依赖第三方的jar包分离开,但稍显有点臃肿,今天再次...

小祝特烦恼
2018/08/23
7.9K
12
SpringBoot打包分离依赖jar和资源文件

参考资料maven-dependency-plugin尝试了网上的很多配置,在我本机试了都有很多问题,要么依赖jar没有拷贝出来 要么就是eclipse报警告,尝试很多次最终解决了 mvn -package 打包后拷贝target下...

Fedo
2018/12/28
159
0
Spring Boot 项目打包工具 - spring-boot-assembly

解决Spring Boot项目打包成jar包后,不方便修改配置文件,减少默认的第三方依赖等问题 该项目演示了使用maven-assembly-plugin等插件打包后,分离配置文件和第三方依赖jar包 spring-boot-as...

geekidea
2018/12/23
2K
0
maven 将本地的jar打包进tar.gz

添加一个本地依赖 如果在maven项目中加入自己的jar,pom.xml中需要这样写: 这个store-service.jar就是我们自己写的jar,而${projuce.basedir} 是maven内置属性,指的是项目的根目录,这样将本...

KongFanhao
2016/11/11
137
0
maven打包相关插件总结(非web服务器运行环境)

maven打包相关插件总结(非web服务器运行环境) 有时候,我们需要把一个maven项目打包成一个jar,并且把依赖的lib都打包到一个lib目录下,利用 java -Dxxx(设置环境变量等) -classpath(类...

Beaver_
2015/11/23
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部