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

问题描述 投票:0回答:1

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

例如java -cp / opt / sampleapp / lib / * Main

具有较旧的joda-time(1.8。)版本,该版本不具有DateTime.now()方法,并且可从2.x版本的joda-time获得。注意:

此joda时间(1.8)被打包到另一个jar(jruby-jar-1.6.8.jar文件)

我正在编写一个使用joda-time(2.x以上)版本的测试应用程序,该版本具有DateTime.now()方法并由我的java类使用。我必须将我的application(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阴影插件来创建uber jar。如何在我的应用程序中提及不要在jruby-1.6.8.jar中选择joda-time(1.8)并在测试应用程序中选择正确版本的joda-time-2.x jar文件。

java maven build pom.xml maven-plugin
1个回答
1
投票

这很困难。

您的jruby JAR通过包含joda time的类来打破规则。我可以想到不同的方法,它们都有缺点:

  1. 使用没有问题的较新版本的jruby。
  2. 采用旧的jruby版本并进行操作:下载它,删除joda-time类,然后使用1.6.8-fixed之类的版本将其加载到您的maven存储库中。
  3. 为测试应用程序着色其他版本的joda time。
© www.soinside.com 2019 - 2024. All rights reserved.