2011-09-18 6 views
5

Sto provando a rendere singolo eseguibile * .jar via proguard plugin per sbt 10. *.Come dire a sbt-proguard di includere java * .jars?

Tutto sembra essere a posto, se non che SBT-Proguard non include vasi Java (nel mio caso mysql-connector-java-5.1.10.jar) causa quando sto cercando di eseguire vaso di uscita con

java -jar proguard-output.min.jar

mi sto

Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
(mentre SBT `run` va bene connettore in modo MySQL è sicuramente nel progetto).

Ho cercato di sfruttare tale problema aggiungendo vaso esplicitamente in build.sbt:

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

inoltre in registro 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) 
... 

Ma io sono ancora ottenere lo stesso eccezione. Che cosa sto facendo di sbagliato?

risposta

3

La classe è specificata nell'input, ma il codice lo istanzia da introspezione, che ProGuard non può conoscere. È quindi necessario specificare esplicitamente che deve essere conservato nell'output.

Cfr. Manuale di ProGuard> Esempi>Processing database drivers

Cfr. Manuale di ProGuard> Risoluzione dei problemi>ClassNotFoundException

Una soluzione più sicura non è probabilmente quella di elaborare giare di terze parti come il driver JDBC, ma di specificare come contenitori di libreria.