首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaFX找不到自定义模块

JavaFX找不到自定义模块
EN

Stack Overflow用户
提问于 2022-04-16 00:34:37
回答 1查看 116关注 0票数 0

我正在用JavaFX和OpenJDK 11制作一个简单的电报机器人,我自己的自定义库。这个项目是作为IntelliJ IDEA的JavaFX项目构建的,而Gradle则是构建系统。该库由一个单独的类(Telegram)组成,其中包含一个用于发送消息的函数,并使用JTeleBot库(https://github.com/shibme/jtelebot)。我没有安装JavaFX,而是使用IntelliJ默认JavaFX库,到目前为止,该库在以前的项目中一直运行良好。程序在包含自定义库之前正确打开,但一旦包含它,它就会出现以下错误:

代码语言:javascript
运行
复制
Error occurred during initialization of boot layer
java.lang.module.FindException: Module Telegram not found, required by my.group.project_telegram

有人知道如何解决这个问题吗?require Telegram包含在module-info.java文件中。我也试着从头开始重新设计这个项目,但没有结果。以下是我的一些项目文件:

build.gradle:

代码语言:javascript
运行
复制
    plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.10'
    id 'org.beryx.jlink' version '2.24.1'
}

group 'my.group'
version '1.0'

repositories {
    mavenCentral()
    maven {
        url "https://gitlab.com/api/v4/projects/<project-id>/packages/maven"
        credentials(HttpHeaderCredentials) {
            name = "Private-Token"
            value = gitLabPrivateToken // the variable resides in ~/.gradle/gradle.properties
        }
        authentication {
            header(HttpHeaderAuthentication)
        }
    }
}

ext {
    junitVersion = '5.8.2'
}

sourceCompatibility = '11'
targetCompatibility = '11'

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

application {
    mainModule = 'my.group.project_telegram'
    mainClass = 'my.group.project_telegram.HelloApplication'
}

javafx {
    version = '11.0.2'
    modules = ['javafx.controls', 'javafx.fxml']
}

dependencies {
    implementation('my.group:Telegram:1.0')
    implementation('org.controlsfx:controlsfx:11.1.1')
    implementation('com.dlsc.formsfx:formsfx-core:11.5.0') {
        exclude(group: 'org.openjfx')
    }

    testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
}

test {
    useJUnitPlatform()
}

jlink {
    imageZip = project.file("${buildDir}/distributions/app-${javafx.platform.classifier}.zip") as RegularFile
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher {
        name = 'app'
    }
}

jlinkZip {
    group = 'distribution'
}

模块-info.java:

代码语言:javascript
运行
复制
module my.group.project_telegram {
    requires javafx.controls;
    requires javafx.fxml;

    requires org.controlsfx.controls;
    requires com.dlsc.formsfx;
    requires Telegram;

    opens my.group.project_telegram to javafx.fxml;
    exports my.group.project_telegram;
}

图书馆:

代码语言:javascript
运行
复制
package pkgTelegram;

import me.shib.java.lib.telegram.bot.service.TelegramBot;
import me.shib.java.lib.telegram.bot.types.*;

import java.io.IOException;

public class Telegram {

    public static void sendToTelegram(String apiToken, String chatId, String text) {
        // the function's code
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-04-16 12:58:08

经过一些尝试和错误之后,我最终想出了一个解决方案。正如@珠宝海所说,问题来自于我的图书馆没有一个模块,而只是一个单独的类。在分级文件这个答案中对此做了进一步的解释。最后,我将以下代码添加到库的build.grade中:

代码语言:javascript
运行
复制
tasks.named('jar') {
    manifest {
        attributes('Automatic-Module-Name': 'my.group.Telegram')
    }
}

并将我的module-info.java修改为:

代码语言:javascript
运行
复制
module my.group.project_telegram {
    requires javafx.controls;
    requires javafx.fxml;

    requires org.controlsfx.controls;
    requires com.dlsc.formsfx;
    requires my.group.Telegram;

    opens my.group.project_telegram to javafx.fxml;
    exports my.group.project_telegram;

}

如果您不能修改库的文件,这个解决方案可能会工作,但我还没有亲自尝试过。

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

https://stackoverflow.com/questions/71890127

复制
相关文章

相似问题

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