"Пакет java.net.http не существует" ошибка на JDK9
У меня проблема с компиляцией простого GET-примера из JavaDoc HttpRequest:
package org.example;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import static java.net.http.HttpRequest.noBody;
import static java.net.http.HttpResponse.asString;
public class Http2 {
public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
HttpResponse response = HttpRequest
.create(new URI("http://www.infoq.com"))
.body(noBody())
.GET().response();
int responseCode = response.statusCode();
String responseBody = response.body(asString());
System.out.println(responseBody);
}
}
я собираюсь package java.net.http does not exist
ошибка при компиляции с использованием JDK 9:
{jdk9} "/ cygdrive / c / Program \ Files / Java / jdk-9 / bin / javac -d out / production -modulesourcepath org.example.module1 / src / -m org.example.module1 org.example.module1 \ src \ org.example.module1 \ org \ example \ Http2.java: 6: ошибка: пакет java.net.http не существует import java.net.http.HttpRequest; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:7: ошибка: пакет java.net.http не существует import java.net.http.HttpResponse; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:9: ошибка: пакет java.net.http не существует импортировать статический java.net.http.HttpRequest.noBody; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:9: ошибка: статический импорт только из классов и интерфейсов импортировать статический java.net.http.HttpRequest.noBody; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:10: ошибка: пакет java.net.http не существует импортировать статический java.net.http.HttpResponse.asString; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:10: ошибка: статический импорт только из классов и интерфейсов импортировать статический java.net.http.HttpResponse.asString; ^ org.example.module1\src\org.example.module1\org\example\Http2.java:14: ошибка: не удается найти символ HttpResponse response = HttpRequest ^ символ: класс HttpResponse расположение: класс Http2 org.example.module1\src\org.example.module1\org\example\Http2.java:14: ошибка: не удается найти символ HttpResponse response = HttpRequest ^ символ: переменная HttpRequest расположение: класс Http2 org.example.module1\src\org.example.module1\org\example\Http2.java:16: ошибка: не удается найти символ.Body (NoBoDy()) ^ символ: метод noBody() расположение: класс Http2 org.example.module1\src\org.example.module1\org\example\Http2.java:19: ошибка: не удается найти символ String responseBody = response.body(asString()); ^ символ: метод asString () расположение: класс Http2 10 ошибок
Та же ошибка возникает при использовании командной строки и IntelliJ.
Это не проблема с моим модулем, потому что классы без java.net.http компилируются и запускаются без проблем.
Есть идеи, что происходит?
5 ответов
В определении вашего модуля, расположенного (на основе имени вашего пакета) в src/org/example/module-info.java
необходимо добавить зависимость к java.net.http
пакет, который входит в java.httpclient
модуль:
module org.example {
requires java.httpclient;
}
Вы можете найти список модулей JDK в сводке модулей.
Между тем, начиная с сборки 149 jdk9, классы
HttpClient
HttpRequest
HttpResponse
WebSocket
были перемещены в пакет jdk.incubator.http
, Они являются частью модуля головоломки jdk.incubator.httpclient
, Смотрите билет JDK-8170648 для более подробной информации.
Таким образом, вы должны изменить свой импорт на jdk.incubator.http.*
, Кроме того, вы должны включить модуль jdk.incubator.httpclient
в вашем module-info.java
, При компиляции и запуске кода добавьте аргумент --add-modules=jdk.incubator.httpclient
на ваш вызов исполняемых файлов Java и Javac.
Все классы, связанные с http-клиентом, были удалены из jdk9. Они включены как функции инкубатора и больше не являются частью API. Надеюсь, новый клиент будет частью jdk10.
В JDK 11 пакет
import java.net.http.HttpClient;
И имя модуля java.net.http
У меня была точно такая же проблема, и вот как я ее решил. В градле у меня уже было
tasks.withType<KotlinCompile>() {
kotlinOptions.jvmTarget = "11"
}
Я добавил Gradle JVM как 11. Это вBuild, Exectution, Deployment --> Build Tools --> Gradle
Кроме того, я добавил этот фрагмент в build.gradle
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
Плюс я также сделал свой модуль SDK как 11.
Дайте мне знать, если это не работает для вас.
Если вы используете Gradle и IntelliJ, это может быть связано с тем, что
Gradle JVM
настройка использует версию ниже Java 11.
Чтобы изменить его в IntelliJ:
- Перейти > > > >
Gradle
- Перейдите к настройке Gradle JVM справа внизу.
- Измените его на любую из версий Java 11.
Если вы используете Maven и IntelliJ, это может быть связано с тем, что
JRE
настройка в Maven использует версию ниже Java 11.
Чтобы изменить его в IntelliJ:
- Перейти к
File
>Settings
>Build, Execution, Deployment
>Build Tools
>Maven
>Runner
- Перейдите к настройке JRE справа.
- Измените его на любой из
Project SDK
или версия Java 11.