减少HtmlUnit库jar大小
您好,我已经使用HTMLUnit编写了一个脚本,它获取给定url的网页并对其执行某些操作。例如,在页面上搜索字符串或单击链接等。我正在使用EclipseIDE创建一个可运行的jar HTML单元由大约21个不同的库jar组成,我正在最后一个可运行jar中提取这些库jar。这些依赖关系导致单个jar占用大约9.3MB的空间。我一直在尝试使用模糊处理来减小单个jar的大小。我正在使用一个叫做proguard的工具 下面是一个示例proguard配置,我正在使用它混淆一个名为“commons-logging-1.1.1.jar”的库jar:减少HtmlUnit库jar大小,jar,obfuscation,proguard,htmlunit,Jar,Obfuscation,Proguard,Htmlunit,您好,我已经使用HTMLUnit编写了一个脚本,它获取给定url的网页并对其执行某些操作。例如,在页面上搜索字符串或单击链接等。我正在使用EclipseIDE创建一个可运行的jar HTML单元由大约21个不同的库jar组成,我正在最后一个可运行jar中提取这些库jar。这些依赖关系导致单个jar占用大约9.3MB的空间。我一直在尝试使用模糊处理来减小单个jar的大小。我正在使用一个叫做proguard的工具 下面是一个示例proguard配置,我正在使用它混淆一个名为“commons-logg
`-libraryjars/lib/rt.jar
-injars C:/Users/Desktop/Jars/commons-logging-1.1.jar
-outjar C:/Users/Desktop/SmallJars/commons-logging-1.1.jar
-printmapping C:/Users/Desktop/SmallJars/out_commons-logging-1.1.map
-重命名SourceFileAttribute源文件
-dontnote
-keepattributes InnerClass、SourceFile、LineNumberTable、已弃用
-保持公开课*{
受公众保护*;
}
-keepclassmembernames类*{
java.lang.Class类$(java.lang.String);
java.lang.Class类$(java.lang.String,布尔值);
}
-KeepClassSwithMemberNames类*{
本地人;
}
-keepclassmembers类*实现java.io.Serializable
{
静态最终长SerialVersionId;
私有void writeObject(java.io.ObjectOutputStream);
私有void readObject(java.io.ObjectInputStream);
java.lang.Object WriterReplace();
java.lang.Object readResolve();
}`
该配置与proguard网站在usage->typical libraries中给出的配置基本相同。在eclipse中使用这21个精简JAR重建项目并运行它时,脚本在运行时失败,但出现以下异常:
“java.lang.NoSuchMethodException:org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext()”
看起来我已经以某种方式混淆了各个JAR,以至于现在找不到某些方法。你能告诉我是什么导致了这些例外情况吗。上面的配置文件是否有问题。如果
那么对于这种情况,什么是最好的proguard配置呢
我知道另一位议员也有同样的问题。问题发布在链接:
[链接]()
谢谢 该方法是通过反射访问的,ProGuard无法从其静态分析中了解反射。您必须在配置中保留它。美国联邦法规。ProGuard手册>故障排除> 将应用程序作为一个整体进行处理比单独处理库要有效得多,因为ProGuard可能会删除全部未使用的库,或者至少删除其中的大部分
`-libraryjars <java.home>/lib/rt.jar
-injars C:/Users/Desktop/Jars/commons-logging-1.1.1.jar
-outjar C:/Users/Desktop/SmallJars/commons-logging-1.1.1.jar
-printmapping C:/Users/Desktop/SmallJars/out_commons-logging-1.1.1.map
-renamesourcefileattribute SourceFile
-dontnote
-keepattributes InnerClasses,SourceFile,LineNumberTable,Deprecated
-keep public class * {
public protected *;
}
-keepclassmembernames class * {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String, boolean);
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers class * implements java.io.Serializable
{
static final long serialVersionUID;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}`