mvn archetype:create -DgroupId=idv.neil.jr622 -DartifactId=jr622開啟 pom.xml,加上 JasperReports Dependency
cd jr622
mvn eclipse:eclipse
<dependency>再加上 downloadSources
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>4.6.0</version>
</dependency>
<build>再執行一次 mvn eclipse:eclipse,第一次執行需要一些時間下載一堆 library。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<!-- 讓產生的 .classpath 包含 source jar -->
<downloadSources>true</downloadSources>
</configuration>
</plugin>
</plugins>
</build>
完成後,重新整理 Eclipse Project。
建立 Java class
public class HelloJasper {JasperReports 提供一個方便的測試 class:JREmptyDataSource,免設 DataSource,可用來檢測版面設計是否正確。
public static void main(String[] args) {
// 先用 iReport 套用 Template 做出一個 Jasper 檔來
// iReport 預設產生 XML 檔,在預覽過後,在 XML 所在目錄就會產出 Jasper 檔
String jsFile = "D:/_Download/report3.jasper";
String outFile = "D:/_Download/report3.pdf";
try {
// 使用神奇的 JREmptyDataSource
JasperPrint print = JasperFillManager.fillReport(jsFile, new HashMap(), new JREmptyDataSource());
JRExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFile);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.exportReport();
}
catch (JRException e) {
e.printStackTrace();
}
}
}
執行如果出現「java.lang.NoClassDefFoundError: org/mozilla/javascript/EvaluatorException」或者「java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException」,就是 JapserReport 使用的 Expression 語言設成 Javascript 或者 Groovy 了,可以到 iReport 檔案名稱按右鍵 > 屬性 > Language 改成 Java 就沒事了。
也可以加上 Javascript 或者 Groovy 的 library。
<dependency>
<groupId>rhino</groupId>
<artifactId>js</artifactId>
<version>1.7R1</version>
</dependency>
<dependency>過程中發現一件有趣的事,就是在 Eclipse Workspace 裡恰好有下載來的 jasperreports project,在對 Sample project 執行 mvn eclipse:eclipse 時,居然不是循往例從 M2_REPO 裡取用 JasperReports library,而是用 Eclipse Project Reference,如下圖:
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>1.7.5</version>
</dependency>
經過往返測試,發現 Maven 是判斷 jasperreports Project 裡的 pom.xml,若符合需求則會拉進來用,即使該 Project 是關閉的。
沒有留言:
張貼留言