热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ProGuardSpringBootMaven插件

ProGuard+SpringBoot+MavenPlugin伙计们,我正在尝试


ProGuard + Spring Boot + Maven Plugin


伙计们,我正在尝试使用 proguard-maven-plugin 混淆 .jar 应用程序。

当我尝试执行混淆过程时,我收到错误消息,指出存在意外的类。

我正在使用 Spring Boot 1.4.1.RELEASE 和 Proguard Maven 插件 2.0.13。

这是我的 proguard.conf










1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48


-injars /workspace/base/target/test-1.0.0.jar

-libraryjars /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/rt.jar

-dontshrink

-dontoptimize

-dontobfuscate

-dontusemixedcaseclassnames

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod

-adaptresourcefilenames **.properties

-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF

-dontpreverify

-verbose

-keepclasseswithmembers public class * {

    public static void main(java.lang.String[]);

}

-keepclassmembers enum  * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

}

-keep class * extends java.beans.BeanInfo

-keep class * {

    void set*(***);

    void set*(int,***);

    boolean is*();

    boolean is*(int);

    *** get*();

    *** get*(int);

}

-assumenosideeffects public class java.lang.System {

    public static long currentTimeMillis();

    static java.lang.Class getCallerClass();

    public static int identityHashCode(java.lang.Object);

    public static java.lang.SecurityManager getSecurityManager();

    public static java.util.Properties getProperties();

    public static java.lang.String getProperty(java.lang.String);

    public static java.lang.String getenv(java.lang.String);

    public static java.lang.String mapLibraryName(java.lang.String);

    public static java.lang.String getProperty(java.lang.String,java.lang.String);

}



pom.xml 文件。我只是通过插件通知配置。










1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23




    com.github.wvengen

    proguard-maven-plugin

    2.0.13

   

       

            package

           

                proguard

           


       


   


   

        false

        **/BOOT-INF/classes/ **.class

        ${basedir}/proguard.conf

        ${project.build.directory}

        ${project.build.finalName}.jar

        ${project.build.finalName}-min.jar

   



但是,在执行过程中,我的应用程序中的所有类都会得到以下返回。










1
2
3


Warning: class [BOOT-INF/classes/br/com/base/BaseApplication.class] unexpectedly contains class [br.com.base.BaseApplication]

Warning: class [BOOT-INF/classes/br/com/base/controller/CaixaController.class] unexpectedly contains class [br.com.base.controller.CaixaController]

[...]


以及 ProGuard 的最终输出。 PS:所有类都在BOOT-INF/classes目录










1
2
3
4
5
6
7


Warning: there were 97 classes in incorrectly named files.

You should make sure all file names correspond to their class names.

The directory hierarchies must correspond to the package hierarchies.

     (http://proguard.sourceforge.net/manual/troubleshooting.html#unexpectedclass)

If you don't mind the mentioned classes not being written out,

you could try your luck using the '-ignorewarnings' option.

Please correct the above warnings first.


谁能想象我可以尝试的任何替代方案?

谢谢。


为了解决这个问题,我确保更改了 pom.xml 中插件的顺序。 proguard 插件应该放在第一位,然后是 spring boot 插件。

此外,请确保您在 spring boot 配置中指定了 repackage。使用正确的顺序和指定的重新打包目标,proguard 混淆/优化/您配置的任何内容都会发生并生成一个 jar。然后 spring boot 插件会将该 jar 重新打包为可执行文件,一切都应该正常工作。

我的插件配置来自 pom.xml:










1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36




....



    com.github.wvengen

    proguard-maven-plugin

   

       

            package

           

                proguard

           


       


   


   

        ${basedir}/proguard.conf

       

            ${java.home}/lib/rt.jar

            ${java.home}/lib/jce.jar

       


   






    org.springframework.boot

    spring-boot-maven-plugin

   

       

           

                repackage

           


           

                org.springframework.boot.loader.JarLauncher

           


       


   




...





相关讨论




  • 当您的 Spring Boot 应用程序是多模块时,您如何包含其他模块?










推荐阅读
  • 本文深入探讨了Scala中的隐式转换机制,包括其在类扩展、隐式解析规则以及隐式参数和上下文绑定等方面的应用。通过具体示例,详细解释了如何利用隐式转换增强类的功能。 ... [详细]
  • 本文将详细介绍NSRunLoop的工作原理,包括其基本概念、消息类型(事件源)、运行模式、生命周期管理以及嵌套运行等关键知识点,帮助开发者更好地理解和应用这一重要技术。 ... [详细]
  • 在尝试通过HTTP请求访问位于http://www.xxx.cn/net/Clicked.asmx的Web服务时,发现输入特定参数后,偶尔会接收到不成功的响应,表现为XML格式的空字符串。此现象并非每次发生,其根本原因尚不明确。 ... [详细]
  • 本文深入探讨了Java中的代理模式,包括静态代理和动态代理的概念、实现及其应用场景。通过具体的代码示例,详细解析了如何利用代理模式增强代码的功能性和灵活性。 ... [详细]
  • 优化JavaScript中的多条件判断逻辑
    本文探讨了在JavaScript中遇到复杂逻辑判断时,如何通过不同的方法优化if/else或switch语句,以提高代码的可读性和可维护性。 ... [详细]
  • 本文详细介绍了 Java 中 freemarker.ext.dom.NodeModel 类的 removeComments 方法,并提供了多个实际使用的代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 深入理解设计模式之观察者模式
    本文详细介绍了观察者模式,这是一种行为设计模式,适用于当对象状态发生变化时,需要通知其他相关对象的场景。文中不仅解释了观察者模式的基本概念,还通过Java代码示例展示了其实现方法。 ... [详细]
  • 前文|功能型_品读鸿蒙HDF架构
    前文|功能型_品读鸿蒙HDF架构 ... [详细]
  • 在Android应用开发过程中,经常需要在SQLite数据库中快速插入大量数据。本文通过实例探讨了不同插入方法的效率,并提供了优化建议。 ... [详细]
  • 面临考试压力,急需解决四个编程问题,包括实现乒乓球的动态效果、计算特定日期是一年的第几天、逆序输出数字以及创建弹出菜单。每个问题的解决都能在TC3.0环境中获得50分。 ... [详细]
  • 本文介绍了一种在Java中实现自然排序的方法,通过自定义比较器来处理包含数字的字符串,确保数字部分按照数值大小进行正确排序。 ... [详细]
  • 本文介绍了两种使用Java发送短信的方法:利用第三方平台的HTTP请求和通过硬件设备短信猫。重点讲解了如何通过Java代码配置和使用短信猫发送短信的过程,包括必要的编码转换、串口操作及短信发送的核心逻辑。 ... [详细]
  • 本文详细介绍了Java中hashCode方法的基本概念、作用及其与equals方法的关系。通过具体示例,解释了hashCode如何提高集合操作的效率。 ... [详细]
  • Spring Boot + MyBatis Plus 实现SQL语句打印的两种方法
    本文详细介绍了如何在Spring Boot和MyBatis Plus环境中实现SQL语句打印的两种方法,包括配置文件设置和多数据源环境下的动态配置。适合开发者在日常开发和调试过程中参考。 ... [详细]
  • 本文详细介绍了Java库中`com.ait.tooling.nativetools.client.collection.NFastArrayList`类的构造函数`()`的使用方法,并提供了多个实际应用中的代码示例,帮助开发者更好地理解和使用这一高效的数据结构。 ... [详细]
author-avatar
loring8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有