当前位置: 首页 > 知识库问答 >
问题:

如何使用spring-boot gradle插件进行保护

淳于思淼
2023-03-14

共有1个答案

李振国
2023-03-14

我认为今天是不可能的,你必须用手动提取和拉链回来。

一个可能有帮助的手动提取和压缩返回的示例:

Build.Gradle

version = '0.1.0'

buildscript {
    dependencies {
        classpath 'net.sf.proguard:proguard-gradle:6.0.3'
        classpath 'net.sf.proguard:proguard-base:6.0.3'
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

task extractJar(type: Copy) {
    def zipFile = file("${buildDir}/libs/your_project_name-${version}.jar")
    def outputDir = file("${buildDir}/unpacked/")

    from zipTree(zipFile)
    into outputDir
}

task proguard(type: proguard.gradle.ProGuardTask) {
    doFirst {
        tasks.extractJar.execute();
    }
    configuration 'proguard.conf'
    injars  "${buildDir}/unpacked/BOOT-INF/classes"
    outjars "${buildDir}/obfClasses"

    libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
    libraryjars "${buildDir}/unpacked/BOOT-INF/lib"

    doLast {
        tasks.deleteClasses.execute();
    }
}

task deleteClasses(type: Delete) {
    delete "${buildDir}/unpacked/BOOT-INF/classes/"

    doLast {
        tasks.copyObfuscatedClasses.execute()
    }
}

task copyObfuscatedClasses(type: Copy) {
    from "${buildDir}/obfClasses"
    into "${buildDir}/unpacked/BOOT-INF/classes/"
    include 'com/**'
    include '*.properties'

    doLast {
        tasks.copyObfuscatedJars.execute()
    }
}

task copyObfuscatedJars(type: Copy) {
    from "${buildDir}/obfClasses"
    into "${buildDir}/unpacked/BOOT-INF/lib/"
    include '*.jar'

    doLast {
        tasks.deleteObfuscated.execute()
    }
}

task deleteObfuscated(type: Delete) {
    delete 'build/obfClasses'

    doLast {
        tasks.repackage.execute()
    }
}

task repackage(type: Zip) {
    from  "${buildDir}/unpacked"
    entryCompression ZipEntryCompression.STORED
    archiveName "your_project_name-${version}-obf.jar"
    destinationDir(file("${buildDir}/libs"))
}
-ignorewarnings
-keepdirectories

-keep interface com.your_package.** { *; }
-keep class com.your_package.main{ *; }
-keep class com.your_package.model.** { *; }

-keepparameternames
-keepclassmembers @org.springframework.** class * {
    *;
}

-keepclassmembers @org.springframework.** interface * {
    *;
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep @org.springframework.** class *
-keepclassmembers @javax.** class * { *; }

-dontwarn org.springframework.**
-dontwarn javax.**
-dontwarn org.yaml.snakeyaml.**
-dontwarn okhttp3.**
 类似资料:
  • 我希望使用spring WebFlux以反应的方式流式传输一个文件。 我的endpoint应该是什么样子更具体的对象的类型是什么?

  • 我的目标是在angular2中应用jQuery插件。它可以是任何插件,如jQuery.DataTable,bootstrap-select等。 我做的是抓取的数据服务。爵士 这里的问题是时差。在第一步,我绑定数据,在第二步,我应用插件,但我认为绑定有点慢,所以插件的代码在实际绑定html呈现之前运行。这给我带来了问题。 示例代码如下: 请建议。

  • 在一个普通的freestyle项目中,我配置了SCM插件来指向我想要发布的Git repo,并且我启用了“Poll SCM”选项,这允许我配置一个Stash webhook来告诉Jenkins何时该repo发生了变化。这样,每当将更改推送到repo时,就可以触发作业。 但是当我使用工作流而不是自由式项目时,我需要构建的代码的SCM是在groovy工作流脚本中以编程方式指定的,这意味着它没有侦听St

  • 当从服务层调用我的的方法时,使用一个长的时,Hibernate的跟踪日志记录会显示每个实体发出的单个SQL语句。 我是否可以强制它进行大容量插入(即多行),而不需要手动摆弄、事务等,甚至不需要原始SQL语句字符串? 致: 而是改为: 在PROD中,我使用的是CockroachDB,性能上的差异是显著的。 日志输出:

  • 我正在尝试使用C# MIP SDK对一个PDF文件应用自定义权限保护。我在MIP SDK中找不到为文件启用自定义权限的选项。MIP SDK中是否有应用自定义权限的选项。我将感谢你的帮助。谢谢你。

  • RestTemplate文档中的Spring注意: 注意:从5.0开始,这个类处于维护模式,只接受微小的更改请求和bug。请考虑使用org.springframework.web.reactive.client.WebClient,它具有更现代的API,支持同步、异步和流场景。 https://docs.spring.io/spring-framework/docs/current/javadoc