2013-10-31 39 views
0

整整一天,我一直試圖運行基於JasperReports庫的第一個報告,但是我還沒有得到我想要的結果。從命令行運行基於JasperReports的應用程序時獲取NoClassDefFoundError

我有一個包含ReportTemplate.jrxml文件:

<!DOCTYPE jasperReport 
    PUBLIC "-//JasperReports//DTD Report Design//EN" 
    "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> 

<jasperReport name="Simple_Report"> 
<detail> 
    <band height="20"> 
     <staticText> 
     <reportElement x="180" y="0" width="200" height="20"/> 
     <text><![CDATA[Hello World!]]></text> 
     </staticText> 
    </band> 
    </detail> 
</jasperReport> 

和我.java文件:

import net.sf.jasperreports.engine.JasperReport; 
import net.sf.jasperreports.engine.JasperCompileManager; 
import net.sf.jasperreports.engine.JasperPrint; 
import net.sf.jasperreports.engine.JasperFillManager; 
import net.sf.jasperreports.engine.JREmptyDataSource; 
import net.sf.jasperreports.engine.JasperExportManager; 
import net.sf.jasperreports.engine.JRException; 
import java.util.HashMap; 

public class TestReport { 
    public static void main(String[] args) { 
     HashMap<String, Object> hm = new HashMap<>(); 
     JREmptyDataSource ds = new JREmptyDataSource(); 
     JasperReport jasperReport; 
     JasperPrint jasperPrint; 
     try { 
      jasperReport = JasperCompileManager.compileReport("ReportTemplate.jrxml"); 
      jasperPrint = JasperFillManager.fillReport(jasperReport, hm, ds); 
      JasperExportManager.exportReportToPdfFile(
      jasperPrint, "reports/simple_report.pdf"); 
     } catch (JRException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

定位都在同一目錄下。所以,讓我們走吧

D:\Java\Applecation\Report>javac -classpath D:\JasperReports\jasperreports-5.5.0\dist\jasperreports-5.5.0.jar TestReport.java 
D:\Java\Applecation\Report>_ 

作品!

D:\Java\Applecation\Report>java -classpath D:\JasperReports\jasperreports-5.5.0\dist\jasperreports-5.5.0.jar TestReport 
Error: Could not find or load main class TestReport 

儘量簡單

D:\Java\Applications\ATConsulting\report>java TestReport 
Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/jasperreports/ 
engine/JRException 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Class.java:2521) 
     at java.lang.Class.getMethod0(Class.java:2764) 
     at java.lang.Class.getMethod(Class.java:1653) 
     at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) 

Caused by: java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JRExcep 
tion 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 6 more 

很抱歉,如果這是愚蠢的問題,我只是初學者。

感謝您的幫助!

+1

我不同意這個問題是重複的!這是一個賈斯珀問題。完全不同。 –

回答

0

的Java無法找到你的主要方法,因爲它不是在你的TestReport類看(這是不是在聲明類路徑)

您必須添加TestReport.class文件的位置到類路徑中,像這樣:

java -classpath D:\JasperReports\jasperreports-5.5.0\dist\jasperreports-5.5.0.jar;. TestReport 

(注意;(在Windows類路徑分隔符)和.(本地目錄)在你的classpath聲明的結尾。

this question看到。

相關問題