使用 Java21 和 Gradle 8.6 的 JavaFX 项目中出现错误依赖项/模块 org.apache.poi:poi:5.2.5

问题描述 投票:0回答:1

当我启动任务

org.apache.poi:poi
时,我似乎无法将库
jpackage
集成到我的项目中(带有 Java21 和 Gradle 的 JavaFX)。

在任务期间

createMergedModule
我收到以下错误:

Fehler: Modul nicht gefunden: org.apache.poi.poi
   requires org.apache.poi.poi;
Fehler: Modul nicht gefunden: org.apache.poi.ooxml
   requires org.apache.poi.ooxml;

它们是用德语写的,但意思是找不到模块。

我哪里出错了?下面我给你整个项目配置:

NB:对于列表

mergedModule
我使用了任务
suggestMergedModuleInfo
预先感谢您。

文件:

module-info.java

尝试一:模块化应用

module my.domain.modulename {

    requires java.base;
    requires java.desktop;
    requires java.sql;

    requires javafx.controls;
    requires javafx.fxml;
    requires javafx.swing;
    requires javafx.web;

    requires org.apache.httpcomponents.httpcore;
    requires org.apache.httpcomponents.httpclient;
    requires org.apache.commons.io;
    requires org.apache.pdfbox;
    requires org.apache.tika.core;

    requires jasperreports;
    requires com.github.librepdf.openpdf;
    requires com.github.librepdf.pdfFontsExtra;
    requires org.apache.poi.poi;
    requires org.apache.poi.ooxml;
    requires org.apache.poi.ooxml.schemas;

    requires ini4j;

    requires org.json;

    requires org.jsoup;

    opens ... to javafx.fxml;
    opens ... to commons.beanutils;
   
    exports my.domain.projectname;
}

文件:

build.gradle

plugins {
    id 'java-library'
    id 'application'
    id 'org.javamodularity.moduleplugin' version '1.8.12'
    id 'org.openjfx.javafxplugin' version '0.1.0'
    id 'org.beryx.jlink' version '3.0.1'
}

group 'my.domain'
version '1.0.0'

def fullName = 'App Name'
def vendorName = 'Vendor'
def year = new Date().format("yyyy")

repositories {
    mavenCentral()
}

sourceCompatibility = '21'
targetCompatibility = '21'

tasks.withType(JavaCompile).configureEach {
    options.encoding = 'UTF-8'
    options.compilerArgs << '-Xlint:unchecked'
    options.deprecation = true
}

application {
    mainModule = 'my.domain.modulename'
    mainClass = 'my.domain.projectname.MainClass'
}

javafx {
    version = '21'
    modules = ['javafx.base', 'javafx.controls', 'javafx.fxml',
               'javafx.graphics', 'javafx.media', 'javafx.swing', 'javafx.web']
}

dependencies {

    api 'org.jsoup:jsoup:1.17.2'
    api 'org.json:json:20240205'
    api 'org.ini4j:ini4j:0.5.4'

    api 'net.sf.jasperreports:jasperreports:6.21.2'
    api 'net.sf.jasperreports:jasperreports-fonts:6.21.2'

    api 'com.github.librepdf:openpdf:2.0.0'
    api 'com.github.librepdf:openpdf-fonts-extra:2.0.0'

    api 'org.apache.pdfbox:pdfbox:3.0.1'

    api 'org.apache.poi:poi:5.2.5'
    api 'org.apache.poi:poi-ooxml:5.2.5'

    api 'org.apache.httpcomponents:httpclient:4.5.14'
    api 'org.apache.httpcomponents:httpcore:4.4.16'
    api 'org.apache.httpcomponents:httpmime:4.5.14'

    api 'org.apache.tika:tika-core:2.9.1'
    api 'org.apache.tika:tika-parsers:2.9.1'

    api 'commons-io:commons-io:2.15.1'
}

jlink {

    options = ['--bind-services']

    launcher {
        name = 'App Name'
        mainClass = 'my.domain.projectname.MainClass'
    }

    mergedModule {
        requires 'com.fasterxml.jackson.core';
        requires 'com.fasterxml.jackson.annotation';
        requires 'com.fasterxml.jackson.databind';
        requires 'com.fasterxml.jackson.dataformat.xml';
        requires 'java.datatransfer';
        requires 'java.logging';
        requires 'java.sql';
        requires 'java.prefs';
        requires 'java.xml';
        requires 'java.desktop';
        requires 'java.security.jgss';
        requires 'java.naming';
        requires 'java.compiler';
        requires 'java.sql.rowset';
        requires 'org.apache.poi.poi';
        requires 'org.apache.poi.ooxml';
        requires 'org.apache.commons.io';
        requires 'org.slf4j';
        uses 'javax.annotation.processing.Processor';
        provides 'org.apache.tika.metadata.filter.MetadataFilter' with 'org.apache.tika.metadata.filter.NoOpFilter';
        provides 'javax.tools.JavaCompiler' with 'org.eclipse.jdt.internal.compiler.tool.EclipseCompiler';
    }

    jpackage {
        installerOptions += [
                '--name', fullName,
                '--description', fullName,
                '--app-version', version,
                '--vendor', vendorName,
                '--copyright', ('Copyright ' + year + ' ' + vendorName)
        ]
        if (org.gradle.internal.os.OperatingSystem.current().windows) {
            imageOptions += ['--icon', 'src/main/resources/icon.ico', '--resource-dir', 'src/main/resources']
            installerOptions += [
                    '--type', 'msi',
                    '--win-per-user-install',
                    // '--win-dir-chooser',
                    '--win-menu',
                    '--win-shortcut',
                    '--win-menu-group', 'MyMenuGroup',
            ]
        }
    }
}

如何导入这个库?

尝试2:非模块化应用

文件:

build.gradle

plugins {
    id 'java-library'
    id 'application'
//    id 'org.javamodularity.moduleplugin' version '1.8.12'
    id 'org.openjfx.javafxplugin' version '0.1.0'
//    id 'org.beryx.jlink' version '3.0.1'
    id 'org.beryx.runtime' version '1.13.1'
}

group 'my.domain'
version '1.0.0'

def fullName = 'App Name'
def vendorName = 'Vendor'
def year = new Date().format("yyyy")
def jdkPath = 'C:\\Users\\MyUsername\\.jdks\\openjdk-21.0.2'

repositories {
    mavenCentral()
}

sourceCompatibility = '21'
targetCompatibility = '21'

tasks.withType(JavaCompile).configureEach {
    options.encoding = 'UTF-8'
    options.compilerArgs << '-Xlint:unchecked'
    options.deprecation = true
}

application {
//    mainModule = 'my.domain.modulename'
    mainClass = 'my.domain.projectname.MainClass'
}

javafx {
    version = '21'
    modules = ['javafx.base', 'javafx.controls', 'javafx.fxml',
               'javafx.graphics', 'javafx.media', 'javafx.swing', 'javafx.web']
}

dependencies {

    api 'org.jsoup:jsoup:1.17.2'
    api 'org.json:json:20240205'
    api 'org.ini4j:ini4j:0.5.4'

    api 'net.sf.jasperreports:jasperreports:6.21.2'
    api 'net.sf.jasperreports:jasperreports-fonts:6.21.2'

    api 'com.github.librepdf:openpdf:2.0.0'
    api 'com.github.librepdf:openpdf-fonts-extra:2.0.0'

    api 'org.apache.pdfbox:pdfbox:3.0.1'

    api 'org.apache.poi:poi:5.2.5'
    api 'org.apache.poi:poi-ooxml:5.2.5'

    api 'org.apache.httpcomponents:httpclient:4.5.14'
    api 'org.apache.httpcomponents:httpcore:4.4.16'
    api 'org.apache.httpcomponents:httpmime:4.5.14'

    api 'org.apache.tika:tika-core:2.9.1'
    api 'org.apache.tika:tika-parsers:2.9.1'

    api 'commons-io:commons-io:2.15.1'
}

runtime {

    javaHome = jdkPath

    options = ['--bind-services']

    jpackage {

        jpackageHome = jdkPath

        def os = org.gradle.internal.os.OperatingSystem.current()
        def imgType = os.windows ? 'ico' : os.macOsX ? 'icns' : 'png'
        imageOptions += ['--icon', "src/main/resources/icon.$imgType"]

        installerOptions += [
                '--resource-dir', 'src/main/resources',
                '--name', fullName,
                '--description', fullName,
                '--app-version', version,
                '--vendor', vendorName,
                '--copyright', ('Copyright ' + year + ' ' + vendorName)
        ]

        if (os.windows) {
            installerType = 'msi'
            installerOptions += ['--win-per-user-install',
                                 '--win-menu',
                                 '--win-shortcut',
                                 '--win-menu-group', vendorName]
        }
    }
}

错误:

groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.lang.Void(String)

Cannot cast object '[/my/package/MyClass.class]' with class 'java.util.ArrayList' to class 'java.lang.Void' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.lang.Void(String)

我的配置有问题吗?

gradle javafx groovy apache-poi badass-runtime-plugin
1个回答
0
投票

我无法解释原因,因为我没有发现有关此问题的报告,但使用早期版本的插件(

id 'org.beryx.runtime' version '1.12.5'
),问题(
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.lang.Void(String)
)没有发生,并且我能够组装我的非模块化应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.