所以我想试试http客户端
package com.company;
import jdk.incubator.http.HttpClient;
public class Main {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
}
}我的模块信息看起来像这样
module com.company {
requires jdk.incubator.httpclient;
}但我得到了java.lang.NoClassDefFoundError: jdk/incubator/http/HttpClient
我也不明白为什么。我的java版本是“Build9-EA+ 169”,我使用了IntelliJ idea的最新版本(2017.1.3)。我查看了这答案,看起来我只需要将需求添加到文件中,但由于某些原因,它无法工作。
发布于 2017-05-18 09:07:01
如果我使用--add-modules jdk.incubator.httpclient作为启动参数,对我来说很好。
HttpClient client = HttpClient.newHttpClient();
client.executor().execute(() -> System.out.println("Here")); // prints Here如果您说您的模块需要它,并不意味着它将被包含;在默认情况下它不包括。
发布于 2017-05-18 13:58:17
你或IntelliJ肯定犯了一个错误。您使用的是一个孵化器模块,文档中说:
孵化器模块是标准JDK构建生成的JDK运行时映像的一部分。但是,对于类路径上的应用程序,默认情况下不会解析孵化器模块。类路径上的应用程序必须使用
--add-modules命令行选项来请求解析孵化器模块。作为模块开发的应用程序可以直接根据孵化器模块指定requires或requires transitive。
我刚刚确认了在java-9-ea+169上的行为,即我可以编译和启动这样一个模块(从命令行),而不需要额外的标志。
您没有得到编译错误的事实似乎表明IntelliJ在编译中正确地包含了模块声明。您得到了一个运行时错误,并且这个答案帮助表明JVM没有将您启动的代码视为一个模块。
发布于 2017-06-13 03:12:19
我遇到了同样的问题
java.lang.NoClassDefFoundError: jdk/incubator/http/HttpClient
java-9-ea+173和IntelliJ。我遵循Eugene和Nicolais的建议,在Run/Debug配置中通过--add-modules jdk.incubator.httpclient显式地将--add-modules jdk.incubator.httpclient添加到模块路径(on macOS:Menu Bar -> Run -> Edit Configurations -> Configuration Tab -> VM Options -> --add-modules jdk.incubator.httpclient )

从那以后一切都很好。当然,您必须像前面所说的那样将依赖项添加到module-info.java中:
module network {
requires jdk.incubator.httpclient;
}更新
使用最新的IntelliJ IDEA 2017.2 EAP 172.2953.9,我不需要将--add-modules放到VM选项中。从盒子里出来就行了。
https://stackoverflow.com/questions/44041698
复制相似问题