При наличии необходимого списка зависимостей, если вы удалите все необходимые модули из module-info
, среда IDE все равно будет выдавать сообщение об ошибке:
Модуль '' читает пакет 'javafx.beans 'из обоих' javafx.base 'и' javafx.base '
Так что проблема не в вашей информации модуля, а в ваших зависимостях.Если вы закомментируете все из них, кроме JavaFX, проблема исчезнет.
Это означает, что некоторая зависимость несет некоторую ненужную зависимость JavaFX.
Мне удалось изолировать проблемукомментируя только первую зависимость:
compile 'org.transentials:cardhouse-commons:1.1.1'
Итак, вопрос в том, почему это происходит и как мы можем это исправить.
Если вы перейдете в Maven Central repo он показывает GitHub репо зависимости, где вы можете найти файл build.gradle
и его module-info
.
Как и ожидалось, он использует JavaFX:
compile "org.openjfx:javafx-base:11:$platform"
, а также requires javafx.base
в его module-info .
Когда вы используете этот артефакт со своими зависимостями, вы импортируете их javafx.base
import вместе сс вашими из ваших зависимостей JavaFX и возникает конфликт.
Самый быстрый способ решить проблему - это просто изменить это в вашей сборке:
compile 'org.transentials:cardhouse-commons:1.1.1'
на это:
compile ('org.transentials:cardhouse-commons:1.1.1') {
exclude group: 'org.openjfx'
}
, так что вы исключите его зависимости JavaFX и будете использовать свои.
Более постоянное исправление будет изменять артефакт org.transentials:cardhouse-commons
'module-info на:
`requires transitive javafx.base`
Вы можете прочитать об использовании transitive
здесь .
О проблеме следует сообщить автору.
Примечание
В качестве отступления можно использовать плагин javafx
gradle , чтобы позаботиться обо всех связанных частях JavaFX сборки, упрощая его до:
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.5'
}
repositories {
mavenCentral()
}
dependencies {
compile ('org.transentials:cardhouse-commons:1.1.1') {
exclude group: 'org.openjfx'
}
compile files('libs/cardhouse-commons-master-1.1.1.jar')
...
compile 'javax.validation:validation-api:2.0.1.Final'
}
javafx {
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
mainClassName = 'open.terms.client.jfx.Main'
Документы OpenJFX уже используют этот плагин.