Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
减少HtmlUnit库jar大小_Jar_Obfuscation_Proguard_Htmlunit - Fatal编程技术网

减少HtmlUnit库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

您好,我已经使用HTMLUnit编写了一个脚本,它获取给定url的网页并对其执行某些操作。例如,在页面上搜索字符串或单击链接等。我正在使用EclipseIDE创建一个可运行的jar

HTML单元由大约21个不同的库jar组成,我正在最后一个可运行jar中提取这些库jar。这些依赖关系导致单个jar占用大约9.3MB的空间。我一直在尝试使用模糊处理来减小单个jar的大小。我正在使用一个叫做proguard的工具

下面是一个示例proguard配置,我正在使用它混淆一个名为“commons-logging-1.1.1.jar”的库jar:

`-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();
    }`