在模块信息中。java
我得到了错误
包'com。示例“读取包”javafx。来自两个javafx的bean。base和javafx。基地'。
迁移(Java8到Java11)不仅让我感到缓慢,而且肯定地说,这个错误对我来说毫无意义。
我的构建的依赖项部分。格雷德尔
:
def springFrameworkVersion = '5.1.2.RELEASE'
def hibernateVersion = '5.3.7.Final'
def junitJupiterVersion = '5.3.1'
dependencies {
compile 'org.transentials:cardhouse-commons:1.1.1'
compile 'ch.qos.logback:logback-classic:1.2.3'
compile "org.springframework:spring-context:$springFrameworkVersion"
compile "org.springframework:spring-jdbc:$springFrameworkVersion"
compile "org.springframework:spring-orm:$springFrameworkVersion"
compile "org.hibernate:hibernate-core:$hibernateVersion"
compile 'org.apache.commons:commons-dbcp2:2.5.0'
compile 'org.apache.commons:commons-lang3:3.8.1'
compile 'commons-io:commons-io:2.6'
compile 'com.h2database:h2:1.4.197'
compile 'javax.xml.bind:jaxb-api:2.3.1'
compile 'com.google.guava:guava:27.0-jre'
compile 'org.flywaydb:flyway-core:5.2.1'
compile 'javax.validation:validation-api:2.0.1.Final'
compile "org.openjfx:javafx-base:11:$platform"
compile "org.openjfx:javafx-graphics:11:$platform"
compile "org.openjfx:javafx-controls:11:$platform"
compile "org.openjfx:javafx-fxml:11:$platform"
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:2.+'
testCompile 'de.saxsys:jfx-testrunner:1.2'
testCompile 'org.apache.commons:commons-text:1.6'
testCompile "org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion"
testCompile "org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion"
testCompile 'org.hamcrest:hamcrest-all:1.3'
}
和module-info.java
:
module open.terms.client.jfx {
requires org.transentials.cardhouse.commons;
requires com.google.common;
requires org.apache.commons.lang3;
requires org.hibernate.orm.core;
requires java.persistence;
requires slf4j.api;
requires javafx.graphics;
requires javafx.fxml;
requires java.desktop;
}
有人能解释一下编译器想通过这个告诉我什么吗?
错误是,您已经在modulepath for JavaFX中放置了两次相同的模块。
您可能已经将OpenJFX的jmods
以及OpenJFXSDK/lib
放在了模块路径上。
javafx11运行时如下所示:
>
作为许多jmod和
作为maven central中的一组工件。
根据您计划如何构建您的应用程序——模块化还是非模块化——这三个中的任何一个都应该足够使用。
编辑1[概念改进]
在您的构建中。gradle
,您只需要在
compile "org.openjfx:javafx-controls:11:$platform"
compile "org.openjfx:javafx-fxml:11:$platform"
自模块开始,javafx。base
和javafx。图形
通过javafx控件在模块路径中传递。此外,您必须确保,鉴于这些依赖关系,您没有在
项目设置下添加任何库
编辑2[可扩展的改进]
按照OpenJFX的留档,您可以使用插件并摆脱openjfx依赖
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.5'
}
javafx {
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
dependencies {
// all dependencies except openjfx
}
编辑3[动手]
在您的示例中,真正的罪魁祸首是依赖性
compile 'org.transentials:cardhouse-commons:1.1.1'
禁用此功能可以修复此问题。您可能想要将其提升到库所有者(或者如果您拥有它,请修复此问题),以确保它不会同时携带
javafx.base
模块。确切地说,这种依赖带来了org.openjfx: javafx-base: linux: 11.0.1
作为依赖,原因在它们的pom.xml
依赖中很明显。
有了所需的依赖项列表,如果您从模块信息
中删除所有必需的模块,IDE仍然会以相同的错误抱怨:
模块"从javafx.base和javafx.base读取包'javafx.beans'
所以问题不在于模块信息,而在于依赖关系。如果您注释掉所有这些,除了JavaFX,问题就消失了。
这意味着某些依赖项带有一些不必要的JavaFX依赖项。
我已经设法通过只注释第一个依赖项来隔离问题:
compile 'org.transentials:cardhouse-commons:1.1.1'
所以问题是为什么会发生这种情况,以及我们如何解决它。
如果您转到Maven Central repo,它将显示依赖项的GitHub repo,您可以在其中找到构建。gradle
文件及其模块信息
。
正如所料,它使用JavaFX:
compile "org.openjfx:javafx-base:11:$platform"
它还需要javafx.base模块信息。
当您使用依赖项时,您正在导入它们的javafx.base
导入,以及您从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-comons
的模块信息更改为:
`requires transitive javafx.base`
您可以在这里阅读关于
传递
的使用。
应向提交人报告一个问题。
笔记
另外,您可以使用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文档已经使用了这个插件。
我已经用OpenJDK13配置了JavaFX11。我已经将静态地添加到JavaFX的位置。 在项目结构中,我已经配置了OpenJDK13,但它仍然提供了错误中没有
我试图使用java 9和gradle的Spring启动。我无法运行我的简单代码,我得到下面提到的错误:- 我的依赖文件和module-info.java文件非常简单。 有人能帮忙吗?? 谢谢 阿马尔
原因:java.lang.IllegalAccessException:模块javafx.base无法访问类application.Customer(在模块FCR中),因为模块FCR没有向javafx.base打开应用程序 在javafx.base/com.sun.javafx.property.methodHelper.invoke(MethodHelper.java:69) 在javafx.b
完整错误:中发现了两个版本的模块javafx.base Build.Gradle
问题内容: 我正在尝试将Spring Boot与Java 9和Gradle一起使用。我无法运行我的简单代码,出现以下错误: 我的依赖项文件和module-info.java文件非常简单。 有人可以帮忙吗? 问题答案: 排除传递依赖关系使其可以工作,并且也可以调整module-info.java !!!