【发布时间】:2020-02-01 14:05:11
【问题描述】:
有一个应用程序使用带有通配符 * 的类路径运行
例如 java -cp /opt/sampleapp/lib/* Main
它有旧版本的 joda-time(1.8.),它没有方法 DateTime.now() 并且可从 2.x 版本的 joda-time 中获得。 注意:
这个 joda time(1.8) 被打包到另一个 jar (jruby-jar-1.6.8.jar 文件)
我正在编写一个使用 joda-time(2.x 以上) 版本的测试应用程序,该版本具有 DateTime.now() 方法并被我的 java 类使用。我必须将我的应用程序(jar)文件提交到正在运行的 sampleapp 才能运行它。不幸的是,在我的测试应用程序执行期间,旧版本被选中,这导致了
引起:
java.lang.NoSuchMethodError: org.joda.time.DateTime.now()Lorg/joda/time/DateTime;
如果我删除旧版本的 jruby(1.6.8.jar) 并用 jruby(1.7.18) 替换它,则不会出现此类错误。我使用 maven 作为构建工具并使用 maven shaded 插件来创建一个 uber jar。如何在我的应用程序中提及不要在 jruby-1.6.8.jar 中选择 joda-time(1.8) 并在我的测试应用程序中选择正确版本的 joda-time-2.x jar 文件。
【问题讨论】:
标签: java maven build pom.xml maven-plugin