Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有重复依赖项的可运行JAR_Java_Jar_Dependencies_Executable Jar - Fatal编程技术网

Java 具有重复依赖项的可运行JAR

Java 具有重复依赖项的可运行JAR,java,jar,dependencies,executable-jar,Java,Jar,Dependencies,Executable Jar,我正在尝试使用Eclipse创建一个可运行的JAR,但是遇到了一些问题。Eclipse工作区包含两个独立的项目,它们依赖于同一个库。我可以创建可运行的JAR,但问题是当我运行它时,我收到一个java.lang.NoSuchMethodError异常 我相信我收到了java.lang.NoSuchMethodError异常,因为。是否有解决此问题的通用解决方案?如果没有,您建议我怎么做?修复方法是只包含一个版本的库,可以满足使用它的两个库的要求。如果这是不可能的,你将不得不找到一种不同的方式来处理

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


我相信我收到了
java.lang.NoSuchMethodError
异常,因为。是否有解决此问题的通用解决方案?如果没有,您建议我怎么做?

修复方法是只包含一个版本的库,可以满足使用它的两个库的要求。如果这是不可能的,你将不得不找到一种不同的方式来处理事情,这样你就可以消除冲突。选择包括:

  • 从代码中删除导致NoSuchMethodError的一个或多个用法
  • 修改一个或多个库的源代码,以便它们可以愉快地共存
  • 使用OSGi容器,这将允许您在同一应用程序中拥有同一库的两个版本

  • 如果主版本号更改,则表示向后兼容性可能已更改

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

    我会联系图书馆的供应商,询问他们兼容性是否被破坏。如果它们没有响应或者它被破坏了,并且您有源代码,那么唯一的可能性就是重构其中一个库(可能是1.0);v、 g.将所有信息放入新数据包v1中。然后,你必须改变项目,这取决于它


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

    正如SJuan所说,您可以使用OSGI正确设置它

    我理解你的意思是“依赖于同一库的不同版本”?是的,项目A依赖于lib-1.0,项目B依赖于lib-2.0。此外,项目A取决于项目B。谢谢。作为旁注,lib-1.0和lib-2.0不是实际的库;这些只是例子。主版本号和次版本号在我的情况下没有意义,但对其他人来说可能是这样。如果差异在于次版本号,那么仅使用最后一个版本号就应该是安全的(如果库的提供者按照它应该做的做)。如果不同之处在于版本号,通常情况下,使用哪个版本并不重要(但建议使用最后一个版本)。我最终只是更新了我的项目a以使用lib-2.0库。它确实需要我重构我的一些代码,但幸运的是这并不多。幸运的是,我所做的更改很小,但如果它们占用更多的时间,我可能会更多地研究OSGi。谢谢你的帮助!