2011-09-18 66 views
5

我試圖通過proguard plugin爲單個可執行文件* .jar進行編譯。*。如何告訴sbt-proguard包含java * .jars?

所有似乎都沒事,除了sbt-proguard不包括java罐(在我的情況下mysql-connector-java-5.1.10.jar)因爲當我試圖運行輸出jar

java -jar proguard-output.min.jar

我越來越

Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
(SBT的同時`run`去細因此MySQL連接器絕對是項目)。

我試着在build.sbt明確將罐子利用這個問題:

proguardInJars += Path.userHome/".m2"/"repository"/"mysql"/"mysql-connector-java"/"5.1.10"/"mysql-connector-java-5.1.10.jar" 

此外,在proguard的日誌:

... 
Preparing output jar 
... 
Copying resources from program jar [/home/kostya/.m2/repository/mysql/mysql-connector-java/5.1.10/mysql-connector-java-5.1.10.jar] (filtered) 
... 

但我仍然得到同樣的例外。我究竟做錯了什麼?

回答

3

該類在輸入中指定,但代碼僅通過內省進行實例化,ProGuard無法知道該類。因此,您必須明確指出它必須保留在輸出中。

Cfr。 ProGuard手冊>示例>Processing database drivers

參考文獻ProGuard手冊>故障排除>ClassNotFoundException

更安全的解決方案可能不是處理JDBC驅動程序等第三方jar,而是將它們指定爲庫jar。

相關問題