Как сообщить sbt-proguard о включении java *.jars?

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

Кажется, все в порядке, за исключением того, что sbt-proguard не включает java jar (в моем случае mysql-connector-java-5.1.10.jar), когда я пытаюсь запустить output 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) 
...

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


person om-nom-nom    schedule 18.09.2011    source источник


Ответы (1)


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

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

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

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

person Eric Lafortune    schedule 19.09.2011