springboot 静态资源配置
war的使用习惯总感觉网页在jar包里非常不方便 以前总是用 下面的方式运行。
#以前总是通过这种方式将jar包和网页资源统统jar包外加载,总感觉不优雅。
java -jar -Dloader.path=lib,resource xxx.jar
利用spring得配置方式设置,在ide中的时候就把他注释掉,部署的时候打开
spring:
#resources:
#static-locations: file:./public/
分类打包lib和配置
<!--将resource中的页面内容过滤掉-->
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>public/**</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<!--将第三方依赖的jar,过滤到springboot打的jar之外-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--拷贝第三方依赖文件到指定目录,自己手动挑这些jar包可不现实。-->
<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>target/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
通过以上几步,生成的jar会相当小,里面只有自己写的代码和配置文件。而所有的第三方的jar都在target/lib文件夹中。
progurd jar包混淆
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>6.0.2</version>
</dependency>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals><goal>proguard</goal></goals>
</execution>
</executions>
<configuration>
<proguardVersion>6.0.2</proguardVersion>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}.jar</outjar>
<obfuscate>true</obfuscate>
<options>
<!-- 不做收缩(删除注释、未被引用代码) -->
<option>-dontshrink</option>
<!-- 不做优化(变更代码实现逻辑) -->
<option>-dontoptimize</option>
<!-- 不路过非公用类文件及成员 -->
<option>-dontskipnonpubliclibraryclasses</option>
<option>-dontskipnonpubliclibraryclassmembers</option>
<!-- 优化时允许访问并修改有修饰符的类和类的成员 -->
<option>-allowaccessmodification</option>
<!-- 确定统一的混淆类的成员名称来增加混淆 -->
<option>-useuniqueclassmembernames</option>
<!-- 不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有
大量固定写法的包名 -->
<option>-keeppackagenames</option>
<option>-adaptclassstrings</option>
<!-- 不混淆所有特殊的类 -->
<option>-keepattributes
Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option>
<option>-keepparameternames</option>
<option>-dontusemixedcaseclassnames</option>
<option>-dontskipnonpubliclibraryclasses</option>
<option>-verbose</option>
<option>-ignorewarnings</option>
<option>-keepclassmembers class * {
@org.springframework.beans.factory.annotation.Autowired *;
@org.springframework.beans.factory.annotation.Value *;
}
</option>
<!-- 不混淆main方法 -->
<option>-keep class com.bh.sigApp { *; }</option>
<!-- 不混淆所有的set/get方法 -->
<option>-keepclassmembers public class * {void set*(***);***
get*();}</option>
<!-- 不混淆包中的所有类以及类的属性及方法,实体包,混淆了会导致ORM框架及前端无法识别 -->
<!-- 不对包类的类名进行混淆,但对类中的属性和方法混淆 -->
<option>-keep class com.bh.controller.** </option>
<option>-keep class com.bh.service.** </option>
<!-- 不混淆包下的所有类名,且类中的方法也不混淆 -->
<option>-keep class com.bh.pojo.** {*;}</option>
<option>-keep class
com.bh.dto.** {*;}</option>
<option>-keep class com.bh.config.**{*;}</option>
<option>-keep class com.bh.dao.** {*;}</option>
</options>
<libs>
<!-- Include main JAVA library required.-->
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jce.jar</lib>
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>6.0.2</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
注释都没有了,工具类进行了完全混淆,其他类使用了部分混淆
xjar对于生成的jar 加密
<dependency>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar</artifactId>
<version>v2.0.6</version>
</dependency>