包’com.example’从’javafx.base’和’javafx.base’中读取包’javafx.beans’
作者:互联网
在module-info.java中,我收到错误
Package ‘com.example’ reads package ‘javafx.beans’ from both ‘javafx.base’ and ‘javafx.base’.
迁移(Java 8到Java 11)不仅慢慢地让我感到沮丧,而且肯定地,这个错误对我没有任何意义.
我的build.gradle的依赖项部分:
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;
}
有人可以向我解释编译器想要告诉我的内容吗?
解决方法:
使用所需的依赖项列表,如果从module-info中删除所有必需的模块,IDE仍会抱怨同样的错误:
Module ” reads package ‘javafx.beans’ from both ‘javafx.base’ and ‘javafx.base’
所以问题不在于你的module-info,而是在你的依赖项中.如果你注释掉所有这些,除了JavaFX,问题就消失了.
这意味着某些依赖项带有一些不必要的JavaFX依赖项.
我设法通过仅注释第一个依赖项来隔离问题:
compile 'org.transentials:cardhouse-commons:1.1.1'
所以问题是为什么会发生这种情况以及我们如何解决它.
如果您访问Maven Central repo,它会显示依赖项的GitHub repo,您可以在其中找到build.gradle文件及其module-info.
正如预期的那样,uses JavaFX:
compile "org.openjfx:javafx-base:11:$platform"
它还要求module-info中的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-commons的module-info:
`requires transitive javafx.base`
您可以阅读有关传递here的使用.
应向作者报告一个问题.
注意
另外,您可以使用javafx gradle plugin来处理构建的所有相关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文档已经使用了这个插件.
标签:java-module,java-11,java,jigsaw,javafx-11 来源: https://codeday.me/bug/20190827/1745698.html