如何解决运行时Eclipse NoClassDefFoundError

时间:2018-05-20 16:31:48

标签: java eclipse maven openhab

我正在尝试编写一个用java编写的openHab2绑定。我是一个C ++人,java对我来说是新手。违规代码如下所示:

import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
...
@Override
public void initialize() {
    ...
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    ...
}

我将org.apache.httpcomponents.htpclient_4.5.2.v20170210-0925.jar作为外部jar添加到buildpath中,程序构建没有任何问题。 这个项目使用Maven,我也不熟悉它作为构建系统,所以我添加了:

  <dependencies>
    <dependency>
        <groupId>org.apache.httpcomponent</groupId>
        <artifactId>httpclient</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <scope>runtime</scope>
    </dependency>
  </dependencies>

到pom.xml。

当我运行系统时,我收到此错误:

  

2018-05-20 09:51:38.574 [ERROR] [.i.c.AbstractInvocationHandler:101]    - 调用方法'ThingHandler.initialize()'时发生错误   'org.openhab.binding.testbinging.internal.TestBingingHandler@728656fc':   组织/阿帕奇/ HTTP / IMPL /客户/ BasicCredentialsProviderjava.lang.NoClassDefFoundError:   org / apache / http / impl / client / BasicCredentialsProvider at   org.openhab.binding.testbinging.internal.TestBingingHandler.initialize(TestBingingHandler.java:63)

     

2018-05-20 09:51:38.576 [错误] [.c.thing.internal.ThingManager:700]    - 初始化事物'testbinging:sample:0ac3dcf3'的处理程序时发生异常:   组织/阿帕奇/ HTTP / IMPL /客户/ BasicCredentialsProviderjava.lang.NoClassDefFoundError:   组织/阿帕奇/ HTTP / IMPL /客户端/ BasicCredentialsProvider

它看起来像我未经训练的眼睛,因为运行时类路径设置不正确。

我正在使用eclipse-oxygen版本Oxygen.3a Release(4.7.3a),Build id:20181405.1200 and $ mvn -version Apache Maven 3.3.9 Maven主页:/ usr / share / maven Java版本:1.8.0_171,供应商:Oracle Corporation Java home:/ usr / lib / jvm / java-8-openjdk-amd64 / jre

谢谢, 史蒂夫 默认语言环境:en_US,平台编码:UTF-8 操作系统名称:“linux”,版本:“4.9.0-5-amd64”,arch:“amd64”,系列:“unix”

1 个答案:

答案 0 :(得分:0)

这是因为您的依赖项是运行时:

<scope>runtime</scope>

您需要将其更改为:

 <scope>compile</scope>

或删除范围行,因为这是默认范围。

运行时依赖项未在编译时使用。您无法详细了解它:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope