簡體   English   中英

沒有為“sql”語言注冊的查詢執行器工廠

[英]No query executer factory registered for the 'sql' language

關於錯誤的問題:net.sf.jasperreports.engine.JRRuntimeException:沒有為“sql”語言注冊查詢執行器工廠

我的問題是:每當我嘗試從開發環境運行 JasperReports 時,我都可以生成報告。 但是當我運行 jar 文件時,會出現錯誤。

是否有任何解決方法來設置環境變量 net.sf.jasperreports.query.executer.factory.sql? 我嘗試使用 Jasper 6.19.1 和 6.20.0 但我們的問題是一樣的。

該問題與位於 JasperReports jar 根目錄中的文件 default.jasperreports.properties 中的此變量有關。

我正在使用 IntelliJ Ide 和 gradle

我創建了一個程序來顯示問題。 只有兩個文件。

主.java

package br.com.mawan.mawanReport;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperViewer;

public class Main {

    private static final String url = "jdbc:mysql://localhost:3306/wavecounter";
    private static final String driver = "com.mysql.cj.jdbc.Driver";
    private static final String login = "root";
    private static final String pwd = "";

    public Main() {}

    public void print(String path ) throws JRException, SQLException, ClassNotFoundException {
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, login, pwd);
        JasperReport report = JasperCompileManager.compileReport( path );
        JasperPrint reportFill = JasperFillManager.fillReport( report , null, conn );
        JasperViewer.viewReport( reportFill , true );
        conn.close();
    }

    public static void main(String[] args) {
        try {
            new br.com.mawan.mawanReport.Main().print( "C:\\wavecounter\\reports\\Teste.jrxml" );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

build.gradle

plugins {
    id 'java'
}

group 'br.com.mawan'
version '1.0.0'

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation("org.apache.poi:poi:5.2.2")
    implementation("com.lowagie:itext:2.1.7")
    implementation("org.olap4j:olap4j:1.2.0")
    implementation("net.sf.jasperreports:jasperreports:5.6.1")
    implementation("net.sf.jasperreports:jasperreports-fonts:5.6.1")
    implementation("xerces:xercesImpl:2.10.0")
    implementation("mysql:mysql-connector-java:8.0.29")
}

jar {
    manifest { attributes "Main-Class": "br.com.mawan.mawanReport.Main" }
    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}

為了解決這個問題,我創建了一個連接兩個文件的文件,並將其放入名為new.jasperreports_extension.properties資源中。

在 jar 標簽內,我在exclude命令中插入了文件名。 之后插入一個命令,將new.jasperreports_extension.properties重命名為jasperreports_extension.properties

jar {
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA','jasperreports_extension.properties'
    manifest { attributes "Main-Class": "br.com.mawan.mawanReport.Main" }
    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
    rename('new.jasperreports_extension.properties', "jasperreports_extension.properties")
}

之后一切正常。

我想感謝dada67。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM