我正在尝试编写一个用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”
答案 0 :(得分:0)
这是因为您的依赖项是运行时:
<scope>runtime</scope>
您需要将其更改为:
<scope>compile</scope>
或删除范围行,因为这是默认范围。
运行时依赖项未在编译时使用。您无法详细了解它:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope