在开发FineReport插件的时候,推荐使用ant来进行插件包的构建。
插件包构建分为两种情况:一种是仅依赖于FineReport提供的jar包,另一种则是依赖于其他的第三方jar包,这两种情形我们都分别讲解改怎么写构建的build.xml文件。
这种情况比较简单,插件工程按如下方式组合
plugin-name
lib
fr-core-8.0.jar
src
com.fr.pluing.xxxx
build.xml
plugin.xml
把所有finereport提供的jar包放于lib下即可(记得千万不要放fr-applet-8.0.jar),build.xml按下面这样写:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project basedir="." default="jar" name="plugin"> <!-- JDK路径,根据自己机器上实际位置修改--> <property name="jdk.home" value="/System/Library/Java/JavaVirtualMachines/1.6.1.jdk/Contents/Home"/> <property name="libs" value="${basedir}/lib"/> <property name="publicLibs" value=""/> <property name="destLoc" value="."/> <property name="classes" value="classes"/> <xmlproperty file="${basedir}/plugin.xml"/> <property name="current-version" value="${plugin.version}"/> <!-- 插件版本--> <property name="plugin-version" value="${current-version}"/> <!-- 插件名字--> <property name="plugin-name" value="my-name"/> <property name="plugin-jar" value="fr-plugin-${plugin-name}-${plugin-version}.jar"/> <target name="prepare"> <delete dir="${classes}"/> <delete dir="fr-plugin-${plugin-name}-${plugin-version}"/> <xmlproperty file="${basedir}/plugin.xml"/> <delete dir="${destLoc}/${plugin.name}"/> </target> <path id="compile.classpath"> <fileset dir="${libs}"> <include name="**/*.jar"/> </fileset> <fileset dir="${publicLibs}"> <include name="**/*.jar"/> </fileset> </path> <patternset id="resources4Jar"> <exclude name="**/.settings/**"/> <exclude name=".classpath"/> <exclude name=".project"/> <exclude name="**/*.java"/> <exclude name="**/*.db"/> <exclude name="**/*.g"/> <exclude name="**/package.html"/> </patternset> <target name="copy_resources"> <echo message="从${resources_from}拷贝图片,JS,CSS等资源文件"/> <delete dir="tmp"/> <copy todir="tmp"> <fileset dir="${resources_from}\src"> <patternset refid="resources4Jar"/> </fileset> </copy> <copy todir="${classes}"> <fileset dir="tmp"/> </copy> <delete dir="tmp"/> </target> <target name="compile_javas"> <echo message="编译${compile_files}下的Java文件"/> <javac destdir="${classes}" debug="false" optimize="on" source="${source_jdk_version}" target="${target_jdk_version}" fork="true" memoryMaximumSize="512m" listfiles="false" srcdir="${basedir}" executable="${compile_jdk_version}/bin/javac"> <src path="${basedir}/src"/> <exclude name="**/.svn/**"/> <compilerarg line="-encoding UTF8 "/> <classpath refid="compile.classpath"/> </javac> </target> <target name="jar_classes"> <echo message="打Jar包:${jar_name}"/> <delete file="${basedir}/${jar_name}"/> <jar jarfile="${basedir}/${jar_name}"> <fileset dir="${classes}"> </fileset> </jar> </target> <target name="super_jar" depends="prepare"> <antcall target="copy_resources"> <param name="resources_from" value="${basedir}"/> </antcall> <antcall target="compile_javas"> <param name="source_jdk_version" value="1.6"/> <param name="target_jdk_version" value="1.6"/> <param name="compile_jdk_version" value="${jdk.home}"/> <param name="compile_files" value="${basedir}/src"/> </antcall> <echo message="compile plugin success!"/> <antcall target="jar_classes"> <param name="jar_name" value="${plugin-jar}"/> </antcall> <delete dir="${classes}"/> </target> <target name="jar" depends="super_jar"> <antcall target="zip"/> </target> <target name="zip"> <property name="plugin-folder" value="fr-plugin-${plugin-name}-${plugin-version}"/> <echo message="----------zip files----------"/> <mkdir dir="${plugin-folder}"/> <copy todir="${plugin-folder}"> <fileset dir="."> <include name="${plugin-jar}"/> <include name="plugin.xml"/> </fileset> </copy> <zip destfile="${basedir}/${plugin-folder}.zip" basedir="."> <include name="${plugin-folder}/*.jar"/> <include name="${plugin-folder}/plugin.xml"/> </zip> <xmlproperty file="${basedir}/plugin.xml"/> <move file="${plugin-folder}.zip" todir="${destLoc}/${plugin.name}"/> </target> </project> |
其中第4行的jdk.home和第17行的plugin-name是需要根据实际情况自己改变的。
build.xml准备好了以后,进入插件目录,执行如下命令就可以自动构建出插件包了,当然,如果本地没有安装ant,也可以利用IntelliJ IDEA自带的ant工具构建。
ant -f build.xml jar |
插件工程的结构要稍有变化,需要把报表相关的jar包都放置到lib/report下,而依赖的第三方jar包则直接放lib下即可
plugin-name
lib
report
fr-core-8.0.jar
other.jar
src
com.fr.pluing.xxxx
build.xml
plugin.xml
同样的插件包构建文件也要稍微做一些修改:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project basedir="." default="jar" name="plugin"> <!-- JDK路径,根据自己机器上实际位置修改--> <property name="jdk.home" value="/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home"/> <property name="libs" value="${basedir}/lib"/> <property name="publicLibs" value=""/> <property name="reportLibs" value="${basedir}/lib/report"/> <property name="destLoc" value="."/> <property name="classes" value="classes"/> <xmlproperty file="${basedir}/plugin.xml"/> <property name="current-version" value="${plugin.version}"/> <!-- 插件版本--> <property name="plugin-version" value="${current-version}"/> <!-- 插件名字--> <property name="plugin-name" value="my-name"/> <property name="plugin-jar" value="fr-plugin-${plugin-name}-${plugin-version}.jar"/> <target name="prepare"> <delete dir="${classes}"/> <delete dir="fr-plugin-${plugin-name}-${plugin-version}"/> <xmlproperty file="${basedir}/plugin.xml"/> <delete dir="${destLoc}/${plugin.name}"/> </target> <path id="compile.classpath"> <fileset dir="${libs}"> <include name="**/*.jar"/> </fileset> <fileset dir="${publicLibs}"> <include name="**/*.jar"/> </fileset> <fileset dir="${reportLibs}"> <include name="**/*.jar"/> </fileset> </path> <patternset id="resources4Jar"> <exclude name="**/.settings/**"/> <exclude name=".classpath"/> <exclude name=".project"/> <exclude name="**/*.java"/> <exclude name="**/*.db"/> <exclude name="**/*.g"/> <exclude name="**/package.html"/> </patternset> <target name="copy_resources"> <echo message="从${resources_from}拷贝图片,JS,CSS等资源文件"/> <delete dir="tmp"/> <copy todir="tmp"> <fileset dir="${resources_from}\src"> <patternset refid="resources4Jar"/> </fileset> </copy> <copy todir="${classes}"> <fileset dir="tmp"/> </copy> <delete dir="tmp"/> </target> <target name="compile_javas"> <echo message="编译${compile_files}下的Java文件"/> <javac destdir="${classes}" debug="false" optimize="on" source="${source_jdk_version}" target="${target_jdk_version}" fork="true" memoryMaximumSize="512m" listfiles="false" srcdir="${basedir}" executable="${compile_jdk_version}/bin/javac"> <src path="${basedir}/src"/> <exclude name="**/.svn/**"/> <compilerarg line="-encoding UTF8 "/> <classpath refid="compile.classpath"/> </javac> </target> <target name="jar_classes"> <echo message="打Jar包:${jar_name}"/> <delete file="${basedir}/${jar_name}"/> <jar jarfile="${basedir}/${jar_name}"> <fileset dir="${classes}"> </fileset> </jar> </target> <target name="super_jar" depends="prepare"> <antcall target="copy_resources"> <param name="resources_from" value="${basedir}"/> </antcall> <antcall target="compile_javas"> <param name="source_jdk_version" value="1.6"/> <param name="target_jdk_version" value="1.6"/> <param name="compile_jdk_version" value="${jdk.home}"/> <param name="compile_files" value="${basedir}/src"/> </antcall> <echo message="compile plugin success!"/> <antcall target="jar_classes"> <param name="jar_name" value="${plugin-jar}"/> </antcall> <delete dir="${classes}"/> </target> <target name="jar" depends="super_jar"> <antcall target="zip"/> </target> <target name="zip"> <property name="plugin-folder" value="fr-plugin-${plugin-name}-${plugin-version}"/> <echo message="----------zip files----------"/> <mkdir dir="${plugin-folder}"/> <copy todir="${plugin-folder}"> <fileset dir="."> <include name="${plugin-jar}"/> <include name="plugin.xml"/> </fileset> <fileset dir="${libs}"> <include name="*.jar"/> <include name="*.dll"/> </fileset> </copy> <zip destfile="${basedir}/${plugin-folder}.zip" basedir="."> <include name="${plugin-folder}/*.jar"/> <include name="${plugin-folder}/*.dll"/> <include name="${plugin-folder}/plugin.xml"/> </zip> <move file="${plugin-folder}.zip" todir="${destLoc}/${plugin.name}"/> </target> </project> |
同样的方式执行ant构建命名之后,插件包中就会包含引入的第三方jar包了。