打jar包
首先在pom.xml中添加如下的插件
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.xxx.admin.Main</mainClass>
<!-- <excludes>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-configuration-processor</artifactId>-->
<!-- </excludes>-->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后运行下面的命令打包
mvn clean package -Dmaven.test.skip=true
打包完成,进入Target目录,使用java -jar命令,运行应用。
然后就可以在浏览器愉快的访问了。
读取资源
接下来是读取jar包中的资源问题,我的需求是能够读取到jar包内的资源文件夹中的多个文件,经过测试发现无法读取,所以只能读取target中的资源。写法如下:
private static String GetTableDir() {
String directory = "";
try {
directory = ResourceUtils.getURL("classpath:").getPath() + "static/table";
// 莫名奇妙的感叹号是怎么回事,好吧,把它干掉
if (directory.contains("!")) {
directory = directory.replaceAll("!", "");
// 不用jar包的resource, 用target中的resource,这里的名字根据项目名称自己改,也可以用查询的方式更健壮
directory = directory.replace("/01helloworld-1.0-SNAPSHOT.jar/BOOT-INF", "");
// 最开始的这个东西也干掉
directory = directory.replace("file:", "");
}
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
return directory;
}
spring boot 打包时排除特定资源
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<excludes>
<exclude>webapp/**</exclude>
</excludes>
</resource>
</resources>
</build>