具有重复依赖性的Runnable JAR

时间:2011-08-19 13:31:17

标签: java jar dependencies executable-jar

我正在尝试使用Eclipse创建一个可运行的JAR,但是遇到了问题。 Eclipse工作区包含两个独立的项目,这些项目依赖于同一个库。我可以创建可运行的JAR,但问题是当我运行它时我收到java.lang.NoSuchMethodError异常。

我相信我收到了java.lang.NoSuchMethodError例外,因为libraries are different versions。是否有解决此问题的通用解决方案?如果没有,你会建议我做什么?

3 个答案:

答案 0 :(得分:1)

如果主要版本号发生变化,则表示向后兼容性可能已更改。

您可以尝试使用最新版本,并希望他们只是添加方法和旧的工作方式,但即使没有抛出NoSuchMethod异常也无法保证(可能使用新API,您应该调用differente方法得到相同的结果)。

我会联系图书馆的提供商,询问他们兼容性是否被破坏。如果他们没有回答或者它被破坏了,并且你有源代码,那么唯一的可能就是重构其中一个库(可能是1.0); V.G。把所有这些都放在新的数据包v1中。然后你必须改变依赖它的项目。

如果以上都不起作用,则解决方案将是OSGi容器或将项目A和项目B设置为两个不同的可执行文件,并将项目B设置为回答项目A消息的服务器。凌乱

答案 1 :(得分:0)

修复程序只包含一个版本的库,它可以满足使用它的两个库。如果这是不可能的,你将不得不找到一种不同的方式去做事情,这样你就可以消除冲突。选项包括:

  1. 从代码中删除导致NoSuchMethodError的一个或多个用途。
  2. 修改一个或多个库的来源,以便他们可以愉快地共存。
  3. 使用OSGi容器,它允许您在同一个应用程序中拥有同一个库的两个版本。

答案 2 :(得分:0)

正如SJuan所说,你可以使用OSGI来正确设置它。 http://en.wikipedia.org/wiki/Java_Classloader#JAR_hell