【发布时间】:2017-11-30 00:42:44
【问题描述】:
java version "1.7.0_71"
Gradle 2.1
你好,
UPDATE:
依赖关系
gradle dependencies | grep httpcore
| +--- org.apache.httpcomponents:httpcore:4.3.3
| +--- org.apache.httpcomponents:httpcore:4.3.3
| +--- org.apache.httpcomponents:httpcore:4.3.3
| +--- org.apache.httpcomponents:httpcore:4.3.3
| | | | | +--- org.apache.httpcomponents:httpcore:4.1 -> 4.3.3
| +--- org.apache.httpcomponents:httpcore:4.3.3
| | | | | +--- org.apache.httpcomponents:httpcore:4.1 -> 4.3.3
这是否意味着我有 4.1 是到 4.3.3 的软链接?似乎很奇怪,因为当我打印出类加载器正在加载的内容时,它似乎加载了 4.3.3:/home/steve/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.3.3/f91b7a4aadc5cf486df6e4634748d7dd7a73f06d/httpcore-4.3.3.jar 似乎很奇怪。
当我尝试运行我的 httpClient 时,我不断收到此错误。一切编译正常。
java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52
我的代码很简单,删除了不重要的代码以保持它的小:
public class GenieClient {
private CloseableHttpClient mClient;
public GenieClient() {
ClassLoader classLoader = GenieClient.class.getClassLoader();
URL resource = classLoader.getResource("org/apache/http/message/BasicLineFormatter.class");
log.log(Level.INFO, "resource: " + resource);
mClient = HttpClientBuilder.create().build();
}
public int sendRequest() {
int responseCode = -1;
try {
HttpResponse response = mClient.execute(new HttpPost("http://www.google.com"));
responseCode = response.getStatusLine().getStatusCode();
}
catch(IOException ex) {
log.log(Level.SEVERE, "IOException: " + ex.getMessage());
}
return responseCode;
}
}
我从 classLoader 得到的输出是这样的:
INFO: resource: jar:file:/home/steve/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.3.3/f91b7a4aadc5cf486df6e4634748d7dd7a73f06d/httpcore-4.3.3.jar!/org/apache/http/message/BasicLineFormatter.class
我使用 gradle 作为我的构建工具,并在我的 build.gradle 文件中设置了这样的依赖项:
dependencies {
compile 'org.apache.httpcomponents:httpclient:4.3.6'
}
我也尝试包含以下 httpcore,但仍然得到相同的错误:
compile 'org.apache.httpcomponents:httpcore:4.4'
一切正常,只有当我运行我的 httpClient 时,
非常感谢您的任何建议,
【问题讨论】:
-
您的依赖关系树中的某处可能还有旧版本的 httpcore。
gradle dependencies的输出是什么? -
您能否提供一个完整的、可运行的示例来说明问题?
-
您在类路径中有不同的 httpcore 版本。尝试排除 httpcore 4.1,看起来您必须使用不同的 jar 执行 2 次。
-
19x 500 赏金和 1800 代表在大约 10 个其他赏金中...... ant2009,你可能是我所知道的唯一一个拥有 60 金、185 银和 320 棕色徽章的人,花费大约 12k 代表在赏金 - 并且有 327 声望... 这个。是。疯狂!
-
@ToYonos 和 vaxquie,嗯,不知道我做错了什么,我在他们的规定的指导方针和政策中使用 SO。我已经成为会员很长时间了,在那段时间里,我发布了一些问题并回答了一些问题。 500点赏金是为了给其他成员的支持额外的功劳。
标签: java gradle apache-httpclient-4.x