[英]Getting “No query executer factory registered for the 'plsql' language” Exception from Java code
[英]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.