首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java11+模块级+ JavaFX + Tablesaw生成ResolutionException

Java11+模块级+ JavaFX + Tablesaw生成ResolutionException
EN

Stack Overflow用户
提问于 2022-02-27 20:06:48
回答 1查看 199关注 0票数 1

请事先原谅我,因为我从2000年代初就开始使用Java了,并且一直在缓慢地将新项目过渡到与Project和模块(在Java 9中引入的)兼容。我被困住了,希望有人能帮我。我试图创建尽可能小的项目,以帮助我专注于这个问题。我在用:

  • JavaFX --我遵循了https://openjfx.io/openjfx-docs/上的说明,使用了他们对IntelliJ模块级的指导,尽管我对构建图像并不感兴趣,所以我将jlink排除在外。一切都很顺利。
  • 一些熊猫类数据处理的
  • JUnit 5.8.2

我只有一个类文件,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的根文件夹中):

代码语言:javascript
复制
./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

代码语言:javascript
复制
rootProject.name = 'TestProject'

build.gradle

代码语言:javascript
复制
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

代码语言:javascript
复制
module TestProject {
    requires javafx.graphics;
    requires javafx.controls;
    requires tablesaw.core;

    exports org.hello;
}

我到目前为止发现的是:

  • 消除表-从module-info.java中注释掉module-info.javabuild.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的日子里我也是完全认证的!)那会和我约会的!)我理解为什么会引入模块化。完全有道理!但坦率地说,我发现要接受它的实现是相当困难的。

任何帮助都将不胜感激。谢谢你好心!

EN

回答 1

Stack Overflow用户

发布于 2022-02-27 23:56:45

Tablesaw 0.42.0并不是为了支持Java模块系统而构建的。

  1. 它没有模块信息。
  2. 它使用阴影作为它的依赖项。
  3. 它使用像RoaringBitmap这样的依赖关系,如果您试图将它们与模块系统一起使用,就会出现问题。

我建议您在Tablesaw中记录一个问题,请求它们图书馆模块化

同时,应该从模块路径运行JavaFX,因为它只支持这种方式,但是从类路径运行Tablesaw可能更好。

您可以将JavaFX放在模块路径和通过命令行开关添加JavaFX模块上。

将Tablesaw放在类路径上,不要将其作为一个模块添加。

不要为您的应用程序定义模块信息,创建一个通过开关添加JavaFX模块的非模块化应用程序。这意味着您的应用程序代码也在类路径上,因此它可以访问Tablesaw,也可以通过命令行开关访问JavaFX模块。

我不使用Gradle,所以我不能为您提供所需的确切构建脚本。

有关更多信息,请参见:

您可能可以使用以下命令打包应用程序:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71288102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档