Разработка JavaFX 11 в IntelliJ и Visual Studio Cdoe - PullRequest
3 голосов
/ 22 апреля 2019

Я настраиваю проект Maven на основе Java / JavaFX 11, который должен быть доступен для редактирования в IntelliJ и Visual Studio Code.

Мой JDK - 11.0.3 (Windows x64) из https://adoptopenjdk.net/.

pom.xml имеет зависимость для

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>11.0.2</version>
</dependency>

Мое приложение может быть скомпилировано и запущено с помощью "compiler: compile" и "exec: java" в IntelliJ. Итак, первый шаг удался.

Теперь при открытии одного и того же проекта в Visual Studio компиляция и запуск не удается с множеством похожих сообщений об ошибках

The package javafx.scene.chart is accessible from more than one module: <unnamed>, javafx.controls

Я добавил файл settings.json в .vscode, чтобы указать на правильный каталог JDK.

 {
    "java.dependency.packagePresentation": "hierarchical",
    "java.home": "C:/Program Files/Java/jdk-11.0.3+7",
    "java.configuration.updateBuildConfiguration": "automatic"
 }

Но кажется, что VSC имеет проблемы с двумя версиями JavaFX или использует неправильный JDK. В представлении «Зависимости Java» я вижу ссылки как из «JRE System Library», так и из «Maven» на JavaFX. Можно ли как-то исключить их из представления JRE?

Снимки экрана, показывающие, как ссылки на JavaFX отображаются в VSC:

JavaFX references from Maven

JavaFX references from JRE

1 Ответ

2 голосов
/ 23 апреля 2019

Основываясь на последнем опубликованном снимке экрана, кажется, что вы используете JDK 11, который включает , включая JavaFX.

Хотя большинство дистрибутивов JDK не включают JavaFX (OpenJDK, Oracle(AdoptOpenJDK среди других), некоторые поставщики связывают JavaFX с JDK, например Liberica.

Если вы проверяете примечания к выпуску Liberica для JDK 11.0.2 :

Windows x86_64, Mac, Linux x86_64 и Linux ARMv7 содержат OpenJFX 11.0.2.

Хотя этот параметр упрощает использование JavaFX (нет необходимости добавлять его в путь к модулю, поскольку он уже является его частью), он может сбивать с толку, если вы используете инструменты сборки Maven или Gradleи включите зависимости JavaFX, или если у вас есть другие JDK, установленные без него.

Так что исправить легко: либо используйте JDK без JavaFX и предоставьте его через зависимости Maven / Gradle, либо используйте JDK с JavaFX и не включайте их.

Я полагаю, что последний вариант является предпочтительным, если вам нужно экспортировать / поделиться своим проектом, поскольку другие могут не иметь такой же настройки.Кроме того, это делает его более гибким для новых выпусков JavaFX.

Кроме того, обратите внимание, что вы можете создать свой собственный JDK, который объединяет JavaFX, следуя инструкциям в https://openjfx.io/openjfx-docs/#modular, разделе Custom JDK + образ JavaFX.

...