有问题请联系管理员stephenking@fanruan.com

Page tree
Skip to end of metadata
Go to start of metadata

核心目标:知道ant的build.xml文件在FR插件打包中需要用到的一些常规的配置

学习时间:10分钟

 

在学习完第一篇文档之后,我们再来看另外一个“简单”的局部。打包描述文件build.xml。

(本文跳过的ant的安装,可自行百度,基本上就是下载解压然后配置一下环境变量即可;同时为了尽快让大家用起来,所以本文会依托于已经封装好的配置文件来讲解)

 

这也是一篇不会让你有什么成就感且极其枯燥的教程,不过如果你是一个刚刚接触FR插件的开发者,请保持你的耐心


我们先整体看一下我们已经封装好的配置文件:【一般情况下,大家只要修改这里面的几个属性即可用于自己开发的插件工程进行打包】

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="jar" name="plugin">
    <!-- JDK路径,根据自己机器上实际位置修改-->
    <property name="jdk.home" value="G:/JDK/jdk1.6.0_43"/>
    <property name="libs" value="${basedir}/lib"/>
    <property name="dependenceLibs" value="${basedir}/dependence"/>
    <property name="FRLibs" value="G:/ReportCode10.0/jar"/>

    <property name="destLoc" value="."/>
    <property name="classes" value="classes"/>
    <xmlproperty file="${basedir}/plugin.xml"/>
    <property name="current-version" value="${plugin.version}"/>
    <property name="current-id" value="${plugin.id}"/>
    <property name="plugin-version" value="${current-version}"/>
    <property name="plugin-name" value="data-factory"/>
    <property name="plugin-jar" value="fr-plugin-${plugin-name}-${plugin-version}.jar"/>
    <target name="prepare">
        <delete dir="${classes}"/>
    </target>
    <path id="compile.classpath">
      <fileset dir="${FRLibs}">
            <include name="**/*.jar"/>
        </fileset>
        <fileset dir="${libs}">
            <include name="**/*.jar"/>
        </fileset>
        <fileset dir="${dependenceLibs}">
            <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\main\java">
                <patternset refid="resources4Jar"/>
            </fileset>
        </copy>
        <copy todir="tmp">
            <fileset dir="${resources_from}\src\main\resources">
                <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" includeantruntime="on">
            <src path="${basedir}/src"/>
            <exclude name="**/.svn/**"/>
            <compilerarg line="-encoding UTF8 "/>
            <classpath refid="compile.classpath"/>
        </javac>
      <taskdef name="pretreatment" classname="com.fr.plugin.pack.PluginPretreatmentTask">
         <classpath refid="compile.classpath"/>
      </taskdef>
      <pretreatment baseDir="${basedir}"/>
    </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="*.jar"/>
                <include name="plugin.xml"/>
            </fileset>
        </copy>
        <copy todir="${plugin-folder}">
            <fileset dir="${libs}">
                <include name="**/*.jar"/>
            </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"/>
        <delete dir="${plugin-folder}"/>
        <delete file="${plugin-jar}" /> 
    </target>
</project>

 

如果你从来没接触过Ant一定会对这一大坨莫名其妙的xml感到困惑。不过不要紧,这个xml本身就不是用来看的,上面的xml是给大家直接copy的~当然有兴趣的也可以自己的看一下里面的配置描述

为了让大家快速入手,我们现在只需要知道里面的几个配置即可

1.相关依赖JAR的申明:

使用时我们只需要配置上面xml的4-7行的几个属性即可

<property name="jdk.home" value="G:/JDK/jdk1.6.0_43"/>
<property name="libs" value="${basedir}/lib"/>
<property name="dependenceLibs" value="${basedir}/dependence"/>
<property name="FRLibs" value="G:/ReportCode10.0/jar"/>

jdk.home: 我们电脑上安装的JDK目录

FRLibs:FR产品自身的JAR包目录

以上两个基本上每个插件都会用到,所以尽可能放到一个公用的位置

 

libs:插件本身编译打包需要用到的非其他插件JAR包目录【最终会被打包到插件安装包内】

dependenceLibs:插件本身编译打包需要用到的其他依赖的插件JAR包目录【最终不会被打包到插件安装包内】

后面这两个配置,并非所有插件都会用到。

如果我们插件本身除了源码不需要依赖产品和JDK之外的什么JAR包那么这个文件夹就是空的

如果我们插件本身除了一般的JAR包依赖,还使用了其他插件里面的相关方法。需要将对应的JAR包配置到依赖中(但是这部分JAR是不会打包到我们插件自身的插件安装包内,而是运行时通过插件引擎去进行依赖)

 

所以我们这个配置文件对应的需要的工程目录基本结构为:

build.bat可以不要的,比如你可以直接用idea配置ant之后打包。【如果你要用批处理执行也是可以的,批处理的内容如下,你需要修改的就是JDK和你得ant目录】

set JAVA_HOME=G:\JDK\jdk1.8.0_45

set ANT_OPTS=-Xmx512M -Xss100m

G:\apache-ant-1.9.5\bin\ant -f build.xml jar

 

 

2.插件安装包相关申明:使用时,我们只需要修改配置xml的15行即可

	<property name="plugin-name" value="my-demo"/>
plugin-name: 插件的“名字”,这个需要跟我们上一篇文档中的插件名称区分开来,这里仅仅是JAR包的名称和安装包的名称的一个关键标识而已。

当然如果对ant运用娴熟了,你可以自行修改后续的命名规则(如果你不明白这句话的意思,就可以直接忽略这句话,不会影响你打包的)

 

我们用idea或者批处理调用这个配置文件打包后我们将会得到如下的一个插件安装包

fr-plugin-my-demo-1.0.zip

     |—fr-plugin-my-demo-1.0

               |—fr-plugin-my-demo-1.0.jar

               |—plugin.xml

               |—.....

 

10.0中基于maven的打包基本只要知道这些就可以用起来了。

额外介绍一些特殊的配置

加密打包:在build.xml的第70-73行的配置,就是FR插件引擎自带的加密方法,加密不同于混淆,一般的反编译手段是无法看到插件的代码逻辑的,如果不需要也可以去掉。

	<taskdef name="pretreatment" classname="com.fr.plugin.pack.PluginPretreatmentTask">
		<classpath refid="compile.classpath"/>
	</taskdef>
	<pretreatment baseDir="${basedir}"/>

资源文件的复制:如果你的工程不是maven工程,或者资源文件有特殊的配置描述,那么可修改copy_resources这个target,进行资源路径的自定义

	<target name="copy_resources">
        <echo message="从${resources_from}拷贝图片,JS,CSS等资源文件"/>
        <delete dir="tmp"/>
        <copy todir="tmp">
            <fileset dir="${resources_from}\src\main\java">
                <patternset refid="resources4Jar"/>
            </fileset>
        </copy>
        <copy todir="tmp">
            <fileset dir="${resources_from}\src\main\resources">
                <patternset refid="resources4Jar"/>
            </fileset>
        </copy>
        <copy todir="${classes}">
            <fileset dir="tmp"/>
        </copy>
        <delete dir="tmp"/>
    </target>


 

到这里我们本堂课的内容就结束了。

10分钟内看完的请重新仔细阅读,以确保你对每一个配置都清楚。当然如果你之前已经非常清楚插件打包的相关内容,可以看下一篇了。

  • No labels
Write a comment…