Emb*_*ler 11 java java-9 java-http-client
所以我想尝试http客户端
package com.company;
import jdk.incubator.http.HttpClient;
public class Main {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
}
}
Run Code Online (Sandbox Code Playgroud)
我的模块信息看起来像这样
module com.company {
requires jdk.incubator.httpclient;
}
Run Code Online (Sandbox Code Playgroud)
但我明白了 java.lang.NoClassDefFoundError: jdk/incubator/http/HttpClient
我真的不明白为什么.我的java版本是"build 9-ea + 169",我使用最新版本的IntelliJ idea(2017.1.3).我查看了这个答案,看起来我只需要将需求添加到文件中,但由于某种原因它不起作用.
Eug*_*ene 11
如果我--add-modules jdk.incubator.httpclient用作启动参数,对我来说很好.
HttpClient client = HttpClient.newHttpClient();
client.executor().execute(() -> System.out.println("Here")); // prints Here
Run Code Online (Sandbox Code Playgroud)
如果你说你的模块需要它,并不意味着它将被包括在内; 在默认情况下不包括在内.
Nic*_*lai 10
要么你或者IntelliJ都犯了错误.您正在使用孵化器模块,文档说明了该模块:
孵化器模块是标准JDK构建生成的JDK运行时映像的一部分.但是,默认情况下,类路径上的应用程序不会解析孵化器模块.类路径上的应用程序必须使用
--add-modules命令行选项来请求解析孵化器模块.作为模块开发的应用程序可以直接指定requires或requires transitive依赖于孵化器模块.
我刚刚确认了这个行为java-9-ea+169,即我可以编译并启动这样一个模块(从命令行)而没有额外的标志.
您没有收到编译错误这一事实似乎表明IntelliJ正确包含了编译中的模块声明.您收到运行时错误并且此答案有助于表明JVM没有看到您作为模块启动的代码.
| 归档时间: |
|
| 查看次数: |
2726 次 |
| 最近记录: |