简体   繁体   English

没有为“sql”语言注册的查询执行器工厂

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

The issue regarding the error: net.sf.jasperreports.engine.JRRuntimeException: No query executer factory registered for the 'sql' language关于错误的问题:net.sf.jasperreports.engine.JRRuntimeException:没有为“sql”语言注册查询执行器工厂

My issue is: whenever I try to run JasperReports from dev environment I can get the reports generated.我的问题是:每当我尝试从开发环境运行 JasperReports 时,我都可以生成报告。 But when I run jar file the error comes up.但是当我运行 jar 文件时,会出现错误。

Is there any workaround to set the enironment variable net.sf.jasperreports.query.executer.factory.sql?是否有任何解决方法来设置环境变量 net.sf.jasperreports.query.executer.factory.sql? I try to use Jasper 6.19.1 and 6.20.0 but the problem us the same.我尝试使用 Jasper 6.19.1 和 6.20.0 但我们的问题是一样的。

The problem is related to this variable located in the file default.jasperreports.properties that's located in the JasperReports jar root.该问题与位于 JasperReports jar 根目录中的文件 default.jasperreports.properties 中的此变量有关。

I'm using IntelliJ Ide and gradle我正在使用 IntelliJ Ide 和 gradle

I created a program to show the problem.我创建了一个程序来显示问题。 There are only two files.只有两个文件。

Main.java主.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 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'
}

To solve it I created a file concatenating both files and put it in the resource with the name new.jasperreports_extension.properties .为了解决这个问题,我创建了一个连接两个文件的文件,并将其放入名为new.jasperreports_extension.properties资源中。

Inside the jar tag I inserted the file name in exclude command.在 jar 标签内,我在exclude命令中插入了文件名。 After that a insert a command to rename new.jasperreports_extension.properties to jasperreports_extension.properties .之后插入一个命令,将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")
}

After that everything worked.之后一切正常。

I would like to give credit to dada67.我想感谢dada67。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM