如何告诉sbt-proguard包含java * .jars?

时间:2011-09-18 18:29:28

标签: scala jar sbt proguard

我正试图通过proguard plugin为sbt 10制作单个可执行文件* .jar。*。

所有似乎都没关系,除了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连接器肯定在项目中。)

我试图通过在build.sbt中明确添加jar来利用这个问题:

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 个答案:

答案 0 :(得分:3)

该类在输入中指定,但代码仅通过内省实例化,ProGuard无法知道。因此,您必须明确指定必须在输出中保留它。

(CFR)。 ProGuard手册>例子> Processing database drivers

(CFR)。 ProGuard手册>疑难解答> ClassNotFoundException

更安全的解决方案可能不是像JDBC驱动程序那样处理第三方jar,而是将它们指定为库jar。