Как сказать sbt-proguard включить java * .jars? - PullRequest
5 голосов
/ 18 сентября 2011

Я пытаюсь сделать один исполняемый файл * .jar через плагин proguard для sbt 10. *.

Все в порядке, за исключением того, что sbt-proguard не включаетjava jars (в моем случае 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).

Я пытался использовать эту проблему, добавив jarявно в 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) 
...

Но я все еще получаю то же исключение.Что я делаю не так?

1 Ответ

3 голосов
/ 20 сентября 2011

Класс указывается во входных данных, но код создает его только путем интроспекции, которую ProGuard не может знать. Поэтому вы должны явно указать, что он должен быть сохранен в выходных данных.

ЧФР. Руководство по ProGuard> Примеры> Обработка драйверов базы данных

ЧФР. Руководство по ProGuard> Устранение неполадок> ClassNotFoundException

Более безопасное решение, вероятно, заключается не в обработке сторонних jar-файлов, таких как драйвер JDBC, а в том, чтобы вместо них указывать их как библиотечные jar.

...