2013-06-19 99 views
-1

您好我已經使用HTMLUnit編寫了一個腳本,該腳本提取給定url的網頁並對它們執行某些操作。例如在頁面上搜索字符串或單擊鏈接等。我正在使用eclipse IDE創建一個可運行的jar。減少HtmlUnit庫的jar大小

HTML-Unit包含大約21種不同的庫罐,我在我的單個最終可運行jar中提取。這些依賴關係導致單個jar佔用大約9.3MB的空間。我一直試圖通過使用模糊處理來減少單個jar的大小。我正在使用一個名爲proguard的工具。

這裏有一個例子proguard的配置,我使用的的「共享記錄-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網站上使用 - >典型庫。在使用這21個縮小的jar重新編譯項目並運行它時,腳本在運行時會失敗,例外:

「java.lang.NoSuchMethodException:org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext() 「

看起來像我混淆了個別瓶子的方式,現在不會找到某些方法。你能指導我什麼可能導致這些例外。並且上面的配置文件有什麼問題。如果 那麼對於這種情況什麼是最好的proguard配置。

我知道另一個成員正在追逐類似的問題。現在的問題是張貼在鏈接:

[鏈接](Determine used libraries to reduce JAR file size

謝謝!!

回答

0

該方法通過反射進行訪問,ProGuard無法從其靜態分析中獲知該方法。您必須將其保存在您的配置中。 (CFR)。 ProGuard手冊>故障排除>NoSuchMethodException

作爲一個整體來處理應用程序比單獨處理庫要有效得多,因爲ProGuard可能會刪除完全未使用的庫或至少大部分未使用的庫。

+0

感謝埃裏克,幫助! – Chiseled