嗨,我使用 HTMLUnit 编写了一个脚本,该脚本获取给定 url 的网页并对其执行某些操作。例如在页面上搜索字符串或单击链接等。我正在使用 Eclipse IDE 创建一个可运行的 jar。
HTML-Unit 由大约 21 个不同的库 jar 组成,我将它们提取到我的单个最终可运行 jar 中。这些依赖关系导致单个 jar 占用大约 9.3MB 的空间。我一直在尝试使用混淆来减小单个 jar 的大小。我正在使用一个名为 proguard 的工具。
这是一个示例 proguard 配置,我用它来混淆名为“commons-logging-1.1.1.jar”的单个库 jar:
`-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();
}`
该配置与 proguard 网站上给出的配置几乎相同 -> 典型库。在 eclipse 中使用这 21 个简化的 jar 重建项目并运行它时,脚本在运行时失败,但有以下异常:
“java.lang.NoSuchMethodException:org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext()”
看起来我已经以现在找不到某些方法的方式混淆了各个罐子。您能否指导我了解可能导致这些异常的原因。上面的配置文件有什么问题吗?如果是这样,这种情况下最好的 proguard 配置是什么。
我知道另一个成员正在寻找类似的问题。问题发布在链接:
[链接](确定使用的库以减小 JAR 文件大小)
谢谢!!