【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

前言

在开发FineReport插件的时候,推荐使用ant来进行插件包的构建。

准备工作

插件包构建分为两种情况:一种是仅依赖于FineReport提供的jar包,另一种则是依赖于其他的第三方jar包,这两种情形我们都分别讲解改怎么写构建的build.xml文件。

仅依赖于FineReport

这种情况比较简单,插件工程按如下方式组合

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按下面这样写:

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包

插件工程的结构要稍有变化,需要把报表相关的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

同样的插件包构建文件也要稍微做一些修改:

build.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包了。

 

  • No labels