Существует приложение, работающее с classpath с подстановочным знаком *
, например, 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. Я должен отправить файл приложения (jar) в работающий образец приложения, чтобы запустить его. К сожалению, более старая версия выбирается во время выполнения моего тестового приложения, которое вызывает
Причина: 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. Как упомянуть в моем приложении, чтобы не выбирать joda-time (1.8) внутри jruby-1.6.8.jar и выбирать правильную версию файла joda-time-2.x jar в моем тестовом приложении.