当前位置: 首页 > 面试题库 >

Java Jar hell运行时异常

景嘉志
2023-03-14
问题内容

运行单元测试时,我遇到了jar hell的问题。

java.lang.RuntimeException: found jar hell in test classpath
    at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:95)
    at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:99)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:585)
Caused by: java.lang.IllegalStateException: jar hell!
class: org.apache.commons.io.CopyUtils
jar1: C:\Users\vvenkatasubbu\.gradle\caches\modules-2\files-2.1\commons-io\commons-io\1.3.2\b6dde38349ba9bb5e6ea6320531eae969985dae5\commons-io-1.3.2.jar
jar2: C:\Users\vvenkatasubbu\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-io\1.3.2\b6dde38349ba9bb5e6ea6320531eae969985dae5\commons-io-1.3.2.jar
    at org.elasticsearch.bootstrap.JarHell.checkClass(JarHell.java:282)
    at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:186)
    at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:87)
    at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:93)
    ... 4 more

我遇到了上述错误,并通过删除了不必要的jar文件解决了这些错误。

但是我面临以下两个jar的问题,即tomcat-embed-core-8.0.36.jar和hibernate-
jpa-2.1-api-1.0.0.Final.jar。这两者之间有一个共同的类,我需要两个jar文件,任何人都可以向我解释如何解决此问题。我都需要jar文件。


    java.lang.RuntimeException: found jar hell in test classpath
            at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:95)
            at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:99)
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Class.java:348)
            at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:585)
        Caused by: java.lang.IllegalStateException: jar hell!
        class: javax.persistence.PersistenceProperty
        jar1: C:\Users\vvenkatasubbu\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\8.0.36\de87fa65671daad59773c8280eeabbd335f42c\tomcat-embed-core-8.0.36.jar
        jar2: C:\Users\vvenkatasubbu\.gradle\caches\modules-2\files-2.1\org.hibernate.javax.persistence\hibernate-jpa-2.1-api\1.0.0.Final\5e731d961297e5a07290bfaf3db1fbc8bbbf405a\hibernate-jpa-2.1-api-1.0.0.Final.jar
            at org.elasticsearch.bootstrap.JarHell.checkClass(JarHell.java:282)
            at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:186)
            at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:87)
            at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:93)
            ... 4 more

提前致谢。


问题答案:

我通过重写单元测试sorce文件夹中的JarHell类来解决此问题。

我已经完成的步骤

  1. 在测试文件夹中创建一个单独的程序包。

org.elasticsearch.bootstrap

  1. 创建一个新类并粘贴以下代码。
    package org.elasticsearch.bootstrap;

    import java.net.URL;

    public class JarHell {
        private JarHell() {}
        public static void checkJarHell() throws Exception {}
        public static void checkJarHell(URL urls[]) throws Exception {}
        public static void checkVersionFormat(String targetVersion) {}
        public static void checkJavaVersion(String resource, String targetVersion) {}
        public static URL[] parseClassPath() {return new URL[]{};}
    }
  1. 做gradlew构建时,问题已得到解决。

  2. 要单独运行集成测试,请将以下行添加到运行配置中的VM参数。

    -ea -Dtests.security.manager=false
    


 类似资料:
  • 声明运行时异常的方法的指导原则是什么? 假设我调用一个抛出的第三方例程。该例程能够抛出而不声明它这样做是否允许/标准/可接受? 和往常一样,我对我的问题引起的困惑感到惊讶:-D这可能是因为我很困惑。 在下面的代码中,可调用的是一个lambda,它发出一个,这会抛出SQLException。callable.call抛出Exception。 我由此推测,程序员希望抛出一个SQLException。然

  • 我试图学习Java FX,所以我使用了一些Oracle Eample代码,但当我试图在Netbean IDE中运行它时,它给了我一个运行时错误。下面是一段代码: 而这是个例外。 Edit:好的,基于rob的回答,我添加了我在示例中遗漏的扩展,现在在我尝试扩展代码后,它甚至给出了更多的异常。下面是该异常的新代码和日志。 这是异常日志:

  • 我得到java.lang.NoSuch方法例外请帮助我在这... 这就是我得到的错误- 错误:java.lang.运行时异常:java.lang.NoSuchmethod异常:com.nielsen.GRFE.processor.mapreduce.占位符$PlaceholderMapper.()在org.apache.hadoop.util.Reflse Utils.new实例(Reflse U

  • 当发生像数组下标越界或类型断言失败这样的运行错误时,Go 运行时会触发运行时 panic,伴随着程序的崩溃抛出一个 runtime.Error 接口类型的值。这个错误值有个 RuntimeError() 方法用于区别普通错误。 panic 可以直接从代码初始化:当错误条件(我们所测试的代码)很严苛且不可恢复,程序不能继续运行时,可以使用 panic 函数产生一个中止程序的运行时错误。panic 接

  • 我在所有项目(平台共享)中将我的Xamarin. form包更新到最新(2.3.4.224),现在我似乎不应该再使用或枚举,因为它们已被弃用。 编译器因为这些行而抱怨: 上面写着: "Device.OS已过时。请改用Runtime平台" 到目前为止一切都很好,现在我想解决这个问题,我一直在尝试使用: 但它抛出了一个运行时异常。这是堆栈跟踪 04-08 14:57:34.812 I/MonoDroi