HBaseTestingUtility 是否可以与 MiniCluster 一起使用?
Does HBaseTestingUtility work at all with a MiniCluster?
我有一个简单的单元测试,我想 运行 针对 HBaseTestingUtility
MiniCluster。 运行 HBaseTestingUtility
测试所需的传递依赖性缺失。我一直在追踪 NoClassDefFoundErrors
并发现 运行 可能是其中一个 jar 文件的打包错误。这是错误:
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/test/MetricsAssertHelper
at org.apache.hadoop.hbase.MiniHBaseCluster.<init>(MiniHBaseCluster.java:91)
当我在项目的 .jar 文件中搜索 MetricsAssertHelper 时,我在 META-INF/services 目录下找到该文件:
jar tvf org/apache/hbase/hbase-hadoop2-compat/1.0.0/hbase-hadoop2-compat-1.0.0-tests.jar | grep MetricsAssertHelper
53 Sat Feb 14 19:43:40 MST 2015 META-INF/services/org.apache.hadoop.hbase.test.MetricsAssertHelper
1337 Sat Feb 14 19:43:40 MST 2015 org/apache/hadoop/hbase/test/MetricsAssertHelperImpl$MockMetricsBuilder.class
3743 Sat Feb 14 19:43:40 MST 2015 org/apache/hadoop/hbase/test/MetricsAssertHelperImpl$MockRecordBuilder.class
6689 Sat Feb 14 19:43:40 MST 2015 org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.class
但是,这不是 .class 文件。我想知道 .jar 文件中是否缺少 MetricsAssertHelper.class
文件,因为那里有一个“MetricsAssertHelperImpl.class 文件”。
这是我的代码和 mvn 依赖项。错误发生在 HBaseTestingUtility.startMiniCluster()
调用中。
private static HBaseTestingUtility utility;
@Before
public void setUp() throws Exception {
utility = new HBaseTestingUtility();
utility.startMiniCluster();
}
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-minicluster</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.0</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-hadoop2-compat</artifactId>
<version>1.0.0</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
</dependencies>
问题是除了 hbase-hadoop2-compat
之外,我还需要 hbase-hadoop-compat
的依赖项。这是 运行 使用 HBaseTestingUtility MiniCluster 进行 JUnit 测试所需的完整依赖项列表。
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-minicluster</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.0</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-hadoop-compat</artifactId>
<version>1.0.0</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-hadoop2-compat</artifactId>
<version>1.0.0</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.0</version>
<scope>test</scope>
</dependency>
我有一个简单的单元测试,我想 运行 针对 HBaseTestingUtility
MiniCluster。 运行 HBaseTestingUtility
测试所需的传递依赖性缺失。我一直在追踪 NoClassDefFoundErrors
并发现 运行 可能是其中一个 jar 文件的打包错误。这是错误:
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/test/MetricsAssertHelper
at org.apache.hadoop.hbase.MiniHBaseCluster.<init>(MiniHBaseCluster.java:91)
当我在项目的 .jar 文件中搜索 MetricsAssertHelper 时,我在 META-INF/services 目录下找到该文件:
jar tvf org/apache/hbase/hbase-hadoop2-compat/1.0.0/hbase-hadoop2-compat-1.0.0-tests.jar | grep MetricsAssertHelper
53 Sat Feb 14 19:43:40 MST 2015 META-INF/services/org.apache.hadoop.hbase.test.MetricsAssertHelper
1337 Sat Feb 14 19:43:40 MST 2015 org/apache/hadoop/hbase/test/MetricsAssertHelperImpl$MockMetricsBuilder.class
3743 Sat Feb 14 19:43:40 MST 2015 org/apache/hadoop/hbase/test/MetricsAssertHelperImpl$MockRecordBuilder.class
6689 Sat Feb 14 19:43:40 MST 2015 org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.class
但是,这不是 .class 文件。我想知道 .jar 文件中是否缺少 MetricsAssertHelper.class
文件,因为那里有一个“MetricsAssertHelperImpl.class 文件”。
这是我的代码和 mvn 依赖项。错误发生在 HBaseTestingUtility.startMiniCluster()
调用中。
private static HBaseTestingUtility utility;
@Before
public void setUp() throws Exception {
utility = new HBaseTestingUtility();
utility.startMiniCluster();
}
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-minicluster</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.0</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-hadoop2-compat</artifactId>
<version>1.0.0</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
</dependencies>
问题是除了 hbase-hadoop2-compat
之外,我还需要 hbase-hadoop-compat
的依赖项。这是 运行 使用 HBaseTestingUtility MiniCluster 进行 JUnit 测试所需的完整依赖项列表。
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-minicluster</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.0</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-hadoop-compat</artifactId>
<version>1.0.0</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-hadoop2-compat</artifactId>
<version>1.0.0</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.0.0</version>
<scope>test</scope>
</dependency>