Open wu9007 opened 10 months ago
执行bootPro任务后打包出的jar中缺少了依赖的第三方sdk
jdk1.8 gradle 6.8 springboot 2.7.14
tasks.register('proguard', ProGuardTask) { dependsOn compileJava // 输出混淆前->混淆后的映射 printmapping "$buildDir/mapping.txt" // 混淆规则文件 configuration '../config/proguard/proguard-rules.pro' // 混淆时依赖的库 libraryjars files(configurations.compile.findAll {}.collect()) libraryjars "${System.getProperty('java.home')}/lib/rt.jar" libraryjars "${System.getProperty('java.home')}/lib/jce.jar" // 混淆输入 injars sourceSets.main.output // 混淆输出 outjars "$buildDir/classes-pro" } tasks.register('bootPro', BootJar) { dependsOn 'proguard' // 重新组织boot-inf下的文件 bootInf { into('classes') { from "$buildDir/classes-pro" } into('lib') { from configurations.runtime } } // 包名 archiveBaseName = "shinow-pro" // 入口 mainClass = 'com.shinow.template.ServerApplication' // 删除混淆后的文件 避免下次混淆打包报错 doLast { new File("$buildDir/classes-pro").deleteDir() } } dependencies { runtimeOnly "com.shinow.brick:project-module-admin:${adminVersion}" implementation "com.shinow.brick:project-common-admin:${adminVersion}" implementation "com.shinow.brick:brick-module-schedule:${brickModuleVersion}" implementation "org.springframework.boot:spring-boot-starter-data-redis" implementation "com.github.xiaoymin:knife4j-openapi2-spring-boot-starter:4.3.0" implementation fileTree(dir: '../lib', includes: ['*.jar']) compileOnly 'org.projectlombok:lombok:1.18.24' annotationProcessor 'org.projectlombok:lombok:1.18.24' implementation 'org.mapstruct:mapstruct:1.4.2.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final' implementation 'com.mysql:mysql-connector-j' implementation 'org.postgresql:postgresql:42.4.1' implementation 'com.oracle.ojdbc:ojdbc8:19.3.0.0' implementation 'com.oracle.database.nls:orai18n:19.7.0.0' testImplementation 'org.springframework.boot:spring-boot-starter-test' testAnnotationProcessor "org.mapstruct:mapstruct-processor:1.4.2.Final" runtimeOnly "org.owasp:dependency-check-gradle:${dependencyCheckVersion}" pmd "com.alibaba.p3c:p3c-pmd:${p3c}" }
proguard-rules.pro
-obfuscationdictionary 'directory.txt' -classobfuscationdictionary 'directory.txt' -packageobfuscationdictionary 'directory.txt' -overloadaggressively # 不警告 -dontwarn # 不理会警告,否则混淆失败 -ignorewarnings # 不压缩 -dontshrink # 不优化 -dontoptimize # 一个类中的成员不使用重复的命名,如Student类混淆后不能出现a属性和a方法。 -useuniqueclassmembernames # 不混淆注解 -keepattributes *Annotation* # 不混淆泛型 -keepattributes Signature # 保留程序入口 -keep class com.shinow.template.ServerApplication { public *; } # 不混淆枚举 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }
找到原因了,因为我使用的是implementation方式依赖的,需要调整为compile。
但是在gradle的6.8版本compile已经废弃了,请问有没有其他更好的方法来解决这个问题?
用api
执行bootPro任务后打包出的jar中缺少了依赖的第三方sdk
环境:
jdk1.8 gradle 6.8 springboot 2.7.14
build.gradle配置如下:
proguard-rules.pro