请事先原谅我,因为我从2000年代初就开始使用Java了,并且一直在缓慢地将新项目过渡到与Project和模块(在Java 9中引入的)兼容。我被困住了,希望有人能帮我。我试图创建尽可能小的项目,以帮助我专注于这个问题。我在用:
我只有一个类文件,HelloFX下包org.hello。
执行..。
$ .\gradlew run
在运行项目时,我从Gradle获得了一个ResolutionException错误:
Error occurred during initialization of boot layer java.lang.module.ResolutionException: Modules shims and RoaringBitmap export package org.roaringbitmap to module listenablefuture
我的项目树(全部位于名为TestProject的根文件夹中):
./gradle
./gradlew
./build.gradle
./.gradle
./gradlew.bat
./settings.gradle
./.idea
./src
./src/test
./src/test/resources
./src/test/java
./src/main
./src/main/resources
./src/main/java
./src/main/java/module-info.java
./src/main/java/org
./src/main/java/org/hello
./src/main/java/org/hello/HelloTS.java以下是相关的文件:
settings.gradle
rootProject.name = 'TestProject'build.gradle
plugins {
id 'application'
id 'java'
id 'idea'
id 'org.openjfx.javafxplugin' version '0.0.12'
id 'org.javamodularity.moduleplugin' version '1.8.10'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
javafx {
version = "17.0.2"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
test {
useJUnitPlatform()
}
dependencies {
implementation 'tech.tablesaw:tablesaw-core:0.42.0'
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'
}
application {
mainModule = "$moduleName"
mainClassName = "org.hello.HelloFX"
}module-info.java
module TestProject {
requires javafx.graphics;
requires javafx.controls;
requires tablesaw.core;
exports org.hello;
}我到目前为止发现的是:
module-info.java中注释掉module-info.java和build.gradle中的implementation 'tech.tablesaw:tablesaw-core:0.42.0',我的小JavaFX应用程序可以很好地处理模块,但随后我失去了Tablesaw。module-info.java,然后注释掉build.gradle中的mainModule行。然后,我只需将JavaFX更改为要运行的程序,就可以运行示例mainClassName程序和示例表程序。我甚至可以在我的示例JavaFX应用程序中添加一些表代码,它可以工作。这是我的备份计划,因为它给了我我想要的,没有模块化的albiet .。所以,我真的很困惑。这个职位没有帮助,也没有任何其他人试图解决Gradle的这个奇怪的ResolutionException错误。我的猜测是Tablesaw不兼容模块吗?或者,对于Tablesaw,我需要在依赖项中使用某种类型的排除子句?我试着使用java-library插件,并在build.gradle中为表使用api子句,因为看起来这个插件是用于非模块库的,但这是行不通的。
必须有一个方法来做到这一点,但无可否认,我准备放弃,再次,只是回到我的最新项目的非模块开发。自从Java成立以来,我就一直是它的超级粉丝(甚至在Sun Microsystems的日子里我也是完全认证的!)那会和我约会的!)我理解为什么会引入模块化。完全有道理!但坦率地说,我发现要接受它的实现是相当困难的。
任何帮助都将不胜感激。谢谢你好心!
发布于 2022-02-27 23:56:45
Tablesaw 0.42.0并不是为了支持Java模块系统而构建的。
我建议您在Tablesaw中记录一个问题,请求它们图书馆模块化。
同时,应该从模块路径运行JavaFX,因为它只支持这种方式,但是从类路径运行Tablesaw可能更好。
您可以将JavaFX放在模块路径和通过命令行开关添加JavaFX模块上。
将Tablesaw放在类路径上,不要将其作为一个模块添加。
不要为您的应用程序定义模块信息,创建一个通过开关添加JavaFX模块的非模块化应用程序。这意味着您的应用程序代码也在类路径上,因此它可以访问Tablesaw,也可以通过命令行开关访问JavaFX模块。
我不使用Gradle,所以我不能为您提供所需的确切构建脚本。
有关更多信息,请参见:
您可能可以使用以下命令打包应用程序:
https://stackoverflow.com/questions/71288102
复制相似问题