In previous articles we created some projects with reports which generated with JasperReport. It's time to create distributive and give it to end user. Here I told about running JasperReport reports from java code and used maven to compile and run it. Here I will use maven for perform next tasks:
For remove jaspers directory with all content with mvn clean command add next code to build section of pom.xml:
Now my maven-jar-plugin configuretion looks like below:
In this code below instruction
allow include to lib folder only necessary for correct work dependencies.
Result.
After run
I obtain next result:
* - Here I repeat NetBeans output structure for compatibility with my current projects but it demonstrate way to create your own result struture .
- Clear unnecessary generated *.jasper files.
- Create result folder with result jar file, report templates and all necessary dependencies, but exclude extra dependencies such as junit.
<project>
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
</project>
Cleaning unnecessary files.
Templates of report stored in root of report directory. After compilation generated jasper and pdf files puts into jaspers folder :├── pom.xml ├── reports │ ├── jaspers │ │ ├── java_beans_datasource_report.jasper │ │ └── java_beans_datasource_report_subreport1.jasper │ ├── java_beans_datasource_report.jrxml │ └── java_beans_datasource_report_subreport1.jrxml
For remove jaspers directory with all content with mvn clean command add next code to build section of pom.xml:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <configuration> <filesets> <fileset> <directory>reports</directory> <includes> <directory>jaspers</directory> <include>**/*.pdf</include> <include>**/*.jasper</include> </includes> <excludes> <exclude>**/*.jrxml</exclude> </excludes> <followSymlinks>false</followSymlinks> </fileset> </filesets> </configuration> </plugin>
Set output directory.
Now, I need directory for distributibe. Let it be result folder in maven generated target directory. pom.xml contain configuration for maven-jar-plugin. Add to configuration section of it next code:<outputDirectory>${project.build.directory}/result</outputDirectory>
Add lib* directory into result folder.
In maven-jar-plugin configuration/archive/manifest add next strings:<addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix>
Now my maven-jar-plugin configuretion looks like below:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.5</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.blogspot.mkazarian.Demo</mainClass> </manifest> </archive> <outputDirectory>${project.build.directory}/result</outputDirectory> </configuration> </plugin>
Copy dependencies to lib folder.
In package stage you can copy necessary dependencies to lib folder with maven-dependency-plugin:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.1</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/result/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> <includeScope>runtime</includeScope> </configuration> </execution> </executions> </plugin>
In this code below instruction
<includeScope>runtime</includeScope>
Copy reports templates to reports folder.
You can do it with maven-resources-plugin.<plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-resources</id> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/result/reports</outputDirectory> <resources> <resource> <directory>reports</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin>
Result.
After run
mvn clean package
├── ireport-experiments-1.0-SNAPSHOT.jar ├── lib │ ├── bcmail-jdk14-1.38.jar │ ├── bcmail-jdk14-138.jar │ ├── bcprov-jdk14-1.38.jar │ ├── bcprov-jdk14-138.jar │ ├── bctsp-jdk14-1.38.jar │ ├── castor-1.2.jar │ ├── commons-beanutils-1.8.0.jar │ ├── commons-collections-3.2.1.jar │ ├── commons-digester-2.1.jar │ ├── commons-logging-1.1.1.jar │ ├── groovy-all-2.3.6.jar │ ├── itext-2.1.7.js2.jar │ ├── jackson-annotations-2.1.4.jar │ ├── jackson-core-2.1.4.jar │ ├── jackson-databind-2.1.4.jar │ ├── jakarta-regexp-1.4.jar │ ├── jasperreports-5.6.0.jar │ ├── jcommon-1.0.15.jar │ ├── jdtcore-3.1.0.jar │ ├── jfreechart-1.0.12.jar │ ├── lucene-analyzers-common-4.5.1.jar │ ├── lucene-core-4.5.1.jar │ ├── lucene-queries-4.5.1.jar │ ├── lucene-queryparser-4.5.1.jar │ ├── lucene-sandbox-4.5.1.jar │ ├── olap4j-0.9.7.309-JS-3.jar │ └── xml-apis-1.3.02.jar └── reports ├── java_beans_datasource_report.jrxml └── java_beans_datasource_report_subreport1.jrxml
Source code:
You can download source code from BitBucket.Related posts:
- Using JavaBean datasource for report and subreport in iReport.
- Runing JasperReport subreport from java code.
Resources
- Using platform encoding
- Delete Additional Files Not Exposed to Maven
- Manifest customization. Set Up The Classpath.
- Copy Resources
* - Here I repeat NetBeans output structure for compatibility with my current projects but it demonstrate way to create your own result struture .
No comments:
Post a Comment