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

发布于 2024-12-05 17:35:45 字数 905 浏览 0 评论 0原文

我正在尝试通过 sbt 10.* 的 proguard 插件 制作单个可执行文件 *.jar。 。

一切似乎都没问题,除了 sbt-proguard 不包含 java jar(在我的例子中是 mysql-connector-java-5.1.10.jar),因为当我尝试运行输出 jar 时使用

java -jar proguard-output.min.jar

时,我

在线程“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"

moreover in proguard log:

...  
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) 
...

显式添加 jar 来利用这个问题,但我仍然遇到相同的异常。我做错了什么?

I'm trying to make single executable *.jar via proguard plugin for sbt 10.*.

All seems to be okay, except that sbt-proguard doesn't include java jars (in my case mysql-connector-java-5.1.10.jar) cause when I'm trying to run output jar with

java -jar proguard-output.min.jar

I'm getting

Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
(while sbt `run` goes fine so mysql connector is definitely in project).

I've tried to leverage that problem by adding jar explicitly in build.sbt:

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

moreover in proguard log:

...  
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) 
...

But I'm still getting the same exception. What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉态萌生 2024-12-12 17:35:45

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

比照。 ProGuard手册>示例> 处理数据库驱动程序

Cfr。 ProGuard手册>故障排除>> ClassNotFoundException

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

The class is specified in the input, but the code only instantiates it by introspection, which ProGuard can't know. You therefore have to specify explicitly that it has to be preserved in the output.

Cfr. ProGuard manual > Examples > Processing database drivers

Cfr. ProGuard manual > Troubleshooting > ClassNotFoundException

A safer solution is probably not to process third-party jars like the JDBC driver, but to specify them as library jars instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文