【问题标题】:How to tell sbt-proguard to include java *.jars?如何告诉 sbt-proguard 包含 java *.jars?
【发布时间】:2011-11-19 18:42:36
【问题描述】:

我正在尝试通过 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) 
...

但我仍然遇到同样的异常。我做错了什么?

【问题讨论】:

    标签: scala jar sbt proguard


    【解决方案1】:

    类是在输入中指定的,但代码只是通过自省的方式实例化它,ProGuard 无法知道。因此,您必须明确指定它必须保留在输出中。

    参照。 ProGuard 手册 > 例子 > Processing database drivers

    参照。 ProGuard 手册 > 疑难解答 > ClassNotFoundException

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2016-12-07
      相关资源
      最近更新 更多