Java 使用ProGuard和uberjar混淆的问题

Java 使用ProGuard和uberjar混淆的问题,java,proguard,maven-shade-plugin,uberjar,Java,Proguard,Maven Shade Plugin,Uberjar,我已经围绕TestNG、Selenium等第三方库构建了一个相当大的框架。 作为一项要求,我需要在分发代码之前对代码进行模糊处理。 为了分发代码,我必须创建一个包含所有依赖项的jar,我使用maven shade时没有遇到任何问题。 问题开始于尝试使用ProGuard进行一些轻微的模糊处理时,我没有在没有依赖项的情况下对jar进行模糊处理(省略阴影阶段) 我在POM中使用以下设置 遮荫舞台 org.apache.maven.plugins maven阴影插件 3.2.1 包裹 阴凉处 com.

我已经围绕TestNG、Selenium等第三方库构建了一个相当大的框架。
作为一项要求,我需要在分发代码之前对代码进行模糊处理。
为了分发代码,我必须创建一个包含所有依赖项的jar,我使用maven shade时没有遇到任何问题。
问题开始于尝试使用ProGuard进行一些轻微的模糊处理时,我没有在没有依赖项的情况下对jar进行模糊处理(省略阴影阶段)

我在POM中使用以下设置

遮荫舞台


org.apache.maven.plugins
maven阴影插件
3.2.1
包裹
阴凉处
com.mycompany.main.Init
真的
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
注入:guice
**
org.apache.xmlbeans:xmlbeans
**
org.freemarker:freemarker
**
poi:poi ooxml模式
**
前进阶段


com.github.wvengen
proguard maven插件
2.1.1
包裹
前卫
${project.build.finalName}.jar
${project.build.finalName}-uber.jar
!META-INF/versions/9/**.class
-dontshrink
-上课!com.mycompany.*,!com.mycompany.*{*;}
-保持课堂秩序**
-保持课堂组织**
-保持类com.google**
-保持课堂自由**
-保持类javax**
-保持类com.sun**
-继续上课**
-保持班级网络畅通**
-保持类com.google**
-忽视警告
-保留董事
-dontnote
-唐特沃恩组织**
-唐特瓦恩·伊奥**
-dontwarn com.fasterxml**
-唐特沃恩·奥基奥**
-dontwarn okhttp3**
-dontwarn freemarker**
-dontwarn com.microsoft**
-libraryjars${java.home}/lib/rt.jar
-libraryjars${java.home}/lib/jce.jar
-允许访问修改
真的
net.sf.proguard
前卫基地
6.1.1
返回的堆栈跟踪(部分)


我猜问题在于ProGuard试图从.jar外部获取依赖项,而不是只使用内部的依赖项,但我没有任何线索,也找不到任何线索,如果有办法让ProGuard使用uberjar中的库,或者,我试图混淆jar的方式是错误的

我觉得ProGuard正在寻找包
javax.mail
,但找不到它。要么将
javax.mail
放在类路径上,要么将ProGuard配置为忽略该特定包。不过我猜,买主请注意,问题似乎出在阴影阶段。当正确的是freemarker时,我指定了org.freemarker。构建现在已经正确完成,但问题仍然存在?为什么在uberjar支持所有库类的情况下还要寻找库类?另一个需要研究的问题是,先混淆代码,然后再创建uber jar,这是我的第一个想法,混淆库jarsYes不会带来任何好处。但因为我无法让它发挥作用,它把一切都打包了,好像从来并没有发生过任何分散一样。目前,我正在使用
-keep class忽略库jar!com.mycompany.*,!com.mycompany.*{*;}
。阶段持续时间约为4分钟,结果是一个30mb的.jar。我很确定它是可以优化的,可能就像你建议的那样。我会尽量抽出时间,再试一次,然后带着结果回来。谢谢。我觉得ProGuard正在寻找包
javax.mail
,但找不到。要么将
javax.mail
放在类路径上,要么将ProGuard配置为忽略该特定包。不过我猜,买主请注意,问题似乎出在阴影阶段。当正确的是freemarker时,我指定了org.freemarker。构建现在已经正确完成,但问题仍然存在?为什么在uberjar支持所有库类的情况下还要寻找库类?另一个需要研究的问题是,先混淆代码,然后再创建uber jar,这是我的第一个想法,混淆库jarsYes不会带来任何好处。但因为我无法让它发挥作用,它把一切都打包了,好像从来并没有发生过任何分散一样。目前,我正在使用
-keep class忽略库jar!com.mycompany.*,!com.mycompany.*{*;}
。阶段持续时间约为4分钟,结果是一个30mb的.jar。我很确定它是可以优化的,可能就像你建议的那样。我会尽量抽出时间,再试一次,然后带着结果回来。非常感谢。
[proguard] Warning: library class javax.mail.search.SearchException extends or implements program class javax.mail.MessagingException
[proguard] Warning: library class javax.mail.search.StringTerm extends or implements program class javax.mail.search.SearchTerm
[proguard] Warning: library class javax.mail.util.ByteArrayDataSource extends or implements program class javax.activation.DataSource
[proguard] Warning: library class javax.mail.util.SharedFileInputStream extends or implements program class javax.mail.internet.SharedInputStream
[proguard] Warning: there were 369 instances of library classes depending on program classes.
[proguard]          You must avoid such dependencies, since the program classes will
[proguard]          be processed, while the library classes will remain unchanged.
[proguard]          (http://proguard.sourceforge.net/manual/troubleshooting.html#dependency)
[proguard] Unexpected error while performing partial evaluation:
[proguard]   Class       = [freemarker/ext/jsp/TagTransformModel]
[proguard]   Method      = [getWriter(Ljava/io/Writer;Ljava/util/Map;)Ljava/io/Writer;]
[proguard]   Exception   = [java.lang.IllegalArgumentException] (Can't find common super class of [freemarker/ext/jsp/JspWriterAdapter] (with 1 known super classes) and [java/io/Writer] (with 2 known super classes))
[proguard] Error: java.lang.IllegalArgumentException: Can't find common super class of [freemarker/ext/jsp/JspWriterAdapter] (with 1 known super classes) and [java/io/Writer] (with 2 known super classes)