在非测试代码中运行 HBaseTestingUtil 失败并出现 ClassNotFoundException:org.junit.Assert

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

我们有一个非标准设置,在集成测试期间使用 HBaseTestingUtil 运行应用程序,但我们在非测试代码中启动迷你集群。

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-testing-util</artifactId>
    <version>${hbase.version}</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
    </exclusions>
</dependency>

我们最近从 HBase1.x 升级到了 HBase2.x,它没有停止工作,我们的服务崩溃了

java.lang.NoClassDefFoundError: org/junit/Assert

部分堆栈跟踪:

Caused by: java.lang.ClassNotFoundException: org.junit.Assert
        at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[?:1.8.0_372]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_372]
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) ~[?:1.8.0_372]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_372]
        at org.apache.hadoop.test.GenericTestUtils.assertExists(GenericTestUtils.java:290) ~[hadoop-common-3.1.1.7.1.6.0-297-tests.jar:?]
        at org.apache.hadoop.test.GenericTestUtils.getTestDir(GenericTestUtils.java:234) ~[hadoop-common-3.1.1.7.1.6.0-297-tests.jar:?]
        at org.apache.hadoop.test.GenericTestUtils.getTestDir(GenericTestUtils.java:243) ~[hadoop-common-3.1.1.7.1.6.0-297-tests.jar:?]
        at org.apache.hadoop.hdfs.MiniDFSCluster.getBaseDirectory(MiniDFSCluster.java:2915) ~[hadoop-hdfs-3.1.1.7.1.6.0-297-tests.jar:?]
        at org.apache.hadoop.hdfs.MiniDFSCluster.determineDfsBaseDir(MiniDFSCluster.java:2905) ~[hadoop-hdfs-3.1.1.7.1.6.0-297-tests.jar:?]
        at org.apache.hadoop.hdfs.MiniDFSCluster.initMiniDFSCluster(MiniDFSCluster.java:847) ~[hadoop-hdfs-3.1.1.7.1.6.0-297-tests.jar:?]
        at org.apache.hadoop.hdfs.MiniDFSCluster.<init>(MiniDFSCluster.java:810) ~[hadoop-hdfs-3.1.1.7.1.6.0-297-tests.jar:?]
        at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniDFSCluster(HBaseTestingUtility.java:671) ~[hbase-server-2.2.3.7.1.6.0-297-tests.jar:2.2.3.7.1.6.0-297]
        at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniDFSCluster(HBaseTestingUtility.java:643) ~[hbase-server-2.2.3.7.1.6.0-297-tests.jar:2.2.3.7.1.6.0-297]
        at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniCluster(HBaseTestingUtility.java:1096) ~[hbase-server-2.2.3.7.1.6.0-297-tests.jar:2.2.3.7.1.6.0-297]
        at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniCluster(HBaseTestingUtility.java:1071) ~[hbase-server-2.2.3.7.1.6.0-297-tests.jar:2.2.3.7.1.6.0-297]

上面还提供了一些关于我们使用的具体版本的信息。
我尝试添加(无范围,也尝试了运行时范围):

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>  
</dependency>

不起作用,所以我假设上面的代码使用了一些特定于测试的类加载器,该类加载器不包含正常依赖项中的所有类?虽然不确定这怎么可能。

还尝试了阴影版本,希望它可以将 junit 打包到其中,但没有成功。

我可以让它以某种方式工作吗?

java hbase hbasetestingutility
1个回答
0
投票
<build>
   <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
         <version>3.2.1</version>
         <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                            <resource>META-INF/services/*</resource>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>
您可以尝试将 JUnit 库与非测试代码一起着色。 Maven Shade 插件可以帮助解决这个问题。
© www.soinside.com 2019 - 2024. All rights reserved.