IntelliJ IDEA中Gradle构建IntelliJ插件ProGuard配置报错求可行示例
IntelliJ插件Gradle ProGuard可运行配置示例
针对你遇到的java.io.IOException: Please correct the above warnings first错误,本质是ProGuard默认将警告视为错误终止执行,同时IntelliJ插件有特殊的API依赖和入口不能被混淆。以下是适配你的环境(IntelliJ IDEA 2022.1.3、Gradle 7.5.1、OpenJDK 11)的可运行配置:
1. 引入ProGuard Gradle插件
在build.gradle头部添加ProGuard的构建脚本依赖:
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.guardsquare:proguard-gradle:7.4.1' // 版本适配Gradle 7.5.1与Java 11 } } apply plugin: 'com.guardsquare.proguard'
2. 配置ProGuard混淆任务
添加专门的混淆任务,针对IntelliJ插件的特性保留必要类和方法,处理依赖警告:
task proguardPlugin(type: proguard.gradle.ProGuardTask) { // 输入文件:编译后的插件代码+非IntelliJ的第三方依赖 injars sourceSets.main.output.classesDirs injars configurations.runtimeClasspath.filter { it.name.endsWith('.jar') && !it.name.contains('intellij') } // 输出混淆后的jar包 outjars "${buildDir}/libs/plugin-obfuscated.jar" // 核心:保留IntelliJ插件必需的入口与API实现 keep 'public class * extends com.intellij.openapi.plugin.PluginBase' keep 'public class * implements com.intellij.openapi.extensions.ExtensionPointName' keep 'public class * implements com.intellij.openapi.actionSystem.AnAction' // 保留插件注解标记的成员(根据你的插件实际使用的注解调整) keepclassmembers class * { @com.intellij.openapi.actionSystem.ActionID <fields>; @com.intellij.openapi.components.Service <methods>; @com.intellij.openapi.extensions.RegisterExtension <methods>; } // 保留必要的属性信息,避免调试和注解失效 keepattributes 'Annotation', 'Signature', 'SourceFile', 'LineNumberTable' // 保留带Project参数的构造方法(插件常用场景) keepclasseswithmembers class * { public <init>(com.intellij.openapi.project.Project); } // 忽略IntelliJ官方API的警告(运行时由IDE提供,无需打包) dontwarn com.intellij.** dontwarn org.jetbrains.annotations.** // Java 11环境配置 target '11' libraryjars "${System.getProperty('java.home')}/lib/rt.jar" libraryjars "${System.getProperty('java.home')}/lib/jce.jar" // 基础混淆配置(如需压缩/优化可注释对应行,建议先关闭排查问题) dontshrink dontoptimize repackageclasses '' allowaccessmodification } // 将混淆任务绑定到构建流程 build.dependsOn proguardPlugin
关键注意事项
- 调整
keep规则:如果你的插件使用了自定义Service、ToolWindow、Inspection等IntelliJ扩展点,需要补充对应的keep规则,比如keep 'public class * extends com.intellij.openapi.wm.ToolWindowFactory' - 警告处理:如果仍有第三方依赖的警告,可通过
dontwarn [包名].**针对性忽略,但需确认该依赖类在运行时不会缺失 - 测试验证:混淆完成后,务必将混淆后的jar包作为插件安装到IDE中测试功能,避免核心逻辑被误混淆导致失效
内容的提问来源于stack exchange,提问作者春风化雨细如丝
相关产品推荐
相关产品推荐

