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

Page tree

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

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

前言

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

<?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 -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