gpt4 book ai didi

java - 如何排除打包为应用程序的 uber jar 的 jar 文件

转载 作者:行者123 更新时间:2023-12-02 09:27:47 26 4
gpt4 key购买 nike

有一个应用程序正在使用带有通配符 * 的类路径运行

e.g java -cp /opt/sampleapp/lib/* Main

其中有旧版本的 joda-time(1.8.),它没有方法 DateTime.now() 并且可从 2.x 版本的 joda-time 中使用。注意:

This joda time(1.8) is packed in to another jar (jruby-jar-1.6.8.jar file)

我正在编写一个测试应用程序,它使用 joda-time(2.x 以上)版本,该版本具有 DateTime.now() 方法并由我的 java 类使用。我必须将我的应用程序(jar)文件提交到正在运行的示例应用程序才能运行它。不幸的是,在我的测试应用程序执行过程中,旧版本被选中,这导致

Caused by: java.lang.NoSuchMethodError:
org.joda.time.DateTime.now()Lorg/joda/time/DateTime;

如果我删除旧版本的 jruby(1.6.8.jar) 并将其替换为 jruby(1.7.18),则不会出现此类错误。我使用 Maven 作为构建工具并使用 Maven 着色插件来创建 uber jar。如何在我的应用程序中提及不要在 jruby-1.6.8.jar 中选择 joda-time(1.8) 并在我的测试应用程序中选择正确版本的 joda-time-2.x jar 文件。

最佳答案

这很难。

您的 jruby JAR 通过包含 joda time 类而违反了规则。我可以想到不同的方法,但都有其缺点:

  1. 使用没有问题的较新版本的 jruby。
  2. 获取旧的 jruby 版本并对其进行操作:下载它,删除 joda-time 类,然后使用 1.6.8-fixed 等版本将其上传到您的 Maven 存储库。
  3. 为您的测试应用程序遮盖其他版本的 joda time。

关于java - 如何排除打包为应用程序的 uber jar 的 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58215981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com