zoukankan      html  css  js  c++  java
  • 用ant打包

    Eclipse 内置了 Ant 。 Ant 是一种类似于批处理程序的软件包,它主要繁琐的工作是编写和调试自动处理脚本(一个 XML 文件),但只要有了这个脚本,我们就可以一键完成所有的设定工作。
    本节还是以 myswt 这个应用程序项目的打包为例,用 Ant 来完成“编译->打成 JAR 包->复制项目引用库->复制本地化文件 swt-win32-3063.dll ->输出 API 文档”这五步。
    1 、在 myswt 项目根目录下,创建最主要的 build.xml 文件
    <?xml version=1.0?>
    <project name=myswt project default=api_doc>
        <!-- 定义目录变量 -->
        <property name=src.dir value=src />
        <property name=bin.dir value=bin />
        <property name=eclipse_plugins.dir value=c:/eclipse/plugins />
        <property name=dist.dir value=d:/dist />
        <property name=doc.dir value=${dist.dir}/api />
        <property name=swt.dll value=swt-win32-3063.dll />
        <!-- 定义编译文件时所引用的库 -->
        <path id=master-classpath>
            <fileset dir=${eclipse_plugins.dir} id=project_lib>
                <include name=org.eclipse.ui.workbench_3.0.1/workbench.jar/>
                <include name=org.eclipse.swt.win32_3.0.1/ws/win32/swt.jar/>
                <include name=org.eclipse.jface_3.0.0/jface.jar/>
                <include name=org.eclipse.osgi_3.0.1/osgi.jar/>
                <include name=org.eclipse.osgi_3.0.1/core.jar/>
                <include name=org.eclipse.osgi_3.0.1/resolver.jar/>
                <include name=org.eclipse.osgi_3.0.1/defaultAdaptor.jar/>
                <include name=org.eclipse.osgi_3.0.1/eclipseAdaptor.jar/>
                <include name=org.eclipse.osgi_3.0.1/console.jar/>
                <include name=org.eclipse.core.runtime_3.0.1/runtime.jar/>
                <include name=org.eclipse.jface.text_3.0.1/jfacetext.jar/>
                <include name=org.eclipse.ui.workbench.compatibility_3.0.0/compatibility.jar/>
            </fileset>
        </path>
     
        <!-- 首任务(空) -->
        <target name=init/>
        <!-- 编译 -->
        <target name=compile depends=init>
            <delete dir=${bin.dir}/>
            <mkdir dir=${bin.dir}/>
            <!-- 编译源程序 -->
            <javac srcdir=${src.dir} destdir=${bin.dir} target=1.4>
                <classpath refid=master-classpath/>
            </javac>
            <!-- 复制图标目录 -->
            <mkdir dir=${bin.dir}/icons/>
            <copy todir=${bin.dir}/icons>
                <fileset dir=icons/>
            </copy>
        </target>
        <!-- 打包 -->
        <target name=pack depends=compile>
            <!-- bin 目录压缩成 JAR 包 -->
            <delete dir=${dist.dir}/>
            <mkdir dir=${dist.dir} />
            <jar basedir=${bin.dir} destfile=${dist.dir}/myswt.jar manifest=ant_manifes.txt>
                <exclude name=**/*Test.* />
                <exclude name=**/Test*.* />
            </jar>
            <!-- 复制用到的库 -->
            <mkdir dir=${dist.dir}/lib />
            <copy todir=${dist.dir}/lib>
                <fileset refid=project_lib/>
            </copy>
            <!-- 复制本地化文件 -->
            <copy todir=${dist.dir} file=${swt.dll}/>
        </target>
        <!-- 输出 api 文档 -->
        <target name=api_doc depends=pack>
            <delete dir=${doc.dir}/>
            <mkdir dir=${doc.dir} />
            <javadoc destdir=${doc.dir} author=true version=true use=true windowtitle=MySWT API>
                <packageset dir=${src.dir} defaultexcludes=yes/>
                <doctitle><![CDATA[<h1>MySWT Project</h1>]]></doctitle>
                <bottom><![CDATA[<i>Document by ChenGang 2005.</i>]]></bottom>
            </javadoc>
        </target>
    </project>
    代码说明:
    ( 1 ) property 项是定义变量,比如 <property name=swt.dll value=swt-win32-3063.dll /> ,就是定义一个变量: swt.dll=swt-win32-3063.dll 。以后用这个变量则是这样: ${swt.dll} 。
    一般尽量将今后可能会变动的目录、文件等定义成变量,以方便维护。不象 Java 变量有类型的区分, Ant 变量是不区别目录、文件等的,所以为了见名知意,在取变量名时,目录都加“ dir ”后缀,这个后缀是可以任取名的。
    下面给出本例用到的变量的含义:
    l            src.dir - Java 源文件路径。 value=src 的 src 是一个相对路径,它相对的是 build.xml 的所在目录位置(即项目根目录)。
    l            bin.dir - Java 编译文件的输出路径
    l            eclipse_plugins.dir - eclipse 的 plugins 目录
    l            dist.dir - 打包文件的存放目录
    l            doc.dir - API 文档的存放目录,这里用到了 dist.dir 变量,直接写 value=d:/dist/api 也未尝不可。
    l            swt.dll - SWT 本地化文件。
    ( 2 ) <path id=master-classpath> ,定义编译文件时所引用的库,相当于 classpath 。 <fileset> 项表示一个文件集,再深入一层的 <include> 项,则表示此文件集下的文件,它们的路径定位相对于 <fileset> 的 dir 属性。 <fileset> 还有一个 id 属性,在后面复制引用库时会用到。
    也许有读者会问:“你是怎么知道要引用这些文件的?”回答:看项目根目录下的“ .classpath ”文件,就可以知道本项目要引用那些库了。实际上笔者是把 .classpath 复制一份后,然后用 Editplus 编辑而得。
    ( 3 )接下来开始定义一些任务。首任务一般都让它为空(没有具体任务内容): <target name=init/> 。
    ( 4 ) Ant 中的任务有着相互的依赖( depends )关系,这些依赖关系是通过 depends 属性来定义的。当要执行一个任务时, Ant 先去执行这个任务的 depends 任务,……, Ant 就这样一直往回找下去。比如:在本例的第二行 default=api_doc ,它定义了缺省任务是 api_doc (输出 api 文档)->此任务的 depends = pack (打包)-> pack 的 depends = compile (编译)-> compile 的 depends=init (首任务), init 没有 depends 。于是, Ant 就从 init 开始依次往回执行任务: init -> compile -> pack -> api_doc 。
    如果你不想“输出 api 文档”,则将第二行的缺省任务定义成 default=pack 即可,这时整个任务链就抛开了 api_doc 。
    ( 5 ) <delete dir=${bin.dir}/> 删除目录。 <mkdir dir=${bin.dir}/> 新建目录
    ( 6 )编译源程序,如下
    <javac srcdir=${src.dir} destdir=${bin.dir} target=1.4>
        <classpath refid=master-classpath/>
    </javac>
    l            srcdir - 源文件目录,其子目录中的源文件也会被 javac.exe 编译。
    l            destdir - 编译文件输出目录。
    l            target - 以 JDK1.4 为编译目标。
    l            classpath - 编译的 classpath 设置, refid 是指引用前面设定的 master-classpath 。
    ( 7 )将 icons (即 myswt/icons )目录的文件,复制到 myswt/bin/icons 目录中,如下:
    <copy todir=${bin.dir}/icons>
        <fileset dir=icons/>
    </copy>
    ( 8 )将文件打成 JAR 包
    <jar basedir=${bin.dir} destfile=${dist.dir}/myswt.jar manifest=ant_manifes.txt>
        <exclude name=**/*Test.* />
        <exclude name=**/Test*.* />
    </jar>
    l            basedir - 源目录。
    l            destfile - 目标目录和打成 JAR 包名。
    l            manifest - 打包清单文件(后面给出其内容)。
    l            exclude - 使用了通配符将某一些文件排除不打包(主要是一些测试文件)。
    ( 9 )如下,将 project_lib 的文件复制到 d:/dist/lib 目录中。 project_lib 是前面“定义编译文件时所引用的库”中的文件集的 id 。结果参数下图 21.25
    <copy todir=${dist.dir}/lib>
        <fileset refid=project_lib/>
    </copy>
    ( 10 )将本地化文件复制到 d:/dist 目录中,如下:
    <copy todir=${dist.dir} file=${swt.dll}/> 
    ( 11 )输出 API 文档(结果参数下图 21.26 )
    <javadoc destdir=${doc.dir} author=true version=true use=true windowtitle=MySWT API>
        <packageset dir=${src.dir} defaultexcludes=yes/>
        <doctitle><![CDATA[<h1>MySWT Project</h1>]]></doctitle>
        <bottom><![CDATA[<i>Document by ChenGang 2005.</i>]]></bottom>
    </javadoc>
    l            destdir - 目标路径 d:/dist/api
    l            packageset - 源文件目录
    l            doctitle - 标题
    l            bottom - 标尾。
    2 、创建打包清单
    为了避免和原来的 manifes.txt 同名,在项目根目录建立一个名为 ant_manifes.txt 的文件。这个文件内容中最长的是 Class-Path 项,没有必要一个个字符的敲入,它可以由项目根目录下的“ .classpath ”编辑而得。
    ant_manifes.txt 内容如下:
    Manifest-Version: 1.0
    Main-Class: jface.dialog.wizard.WizardDialog1
    Class-Path: ./lib/org.eclipse.ui.workbench_3.0.1/workbench.jar ./lib/org.eclipse.swt.win32_3.0.1/ws/win32/swt.jar 
    ./lib/org.eclipse.jface_3.0.0/jface.jar ./lib/org.eclipse.osgi_3.0.1/osgi.jar ./lib/org.eclipse.osgi_
    3.0.1/core.jar ./lib/org.eclipse.osgi_3.0.1/resolver.jar ./lib/org.eclipse.osgi_3.0.1/defaultAdaptor.ja
    r ./lib/org.eclipse.osgi_3.0.1/eclipseAdaptor.jar ./lib/org.eclipse.osgi_3.0.1/console.jar ./lib/org.ecl
    ipse.core.runtime_3.0.1/runtime.jar ./lib/org.eclipse.jface.text_3.0.1/jfacetext.jar ./lib/org.eclipse.u
    i.workbench.compatibility_3.0.0/compatibility.jar
    3 、如下图 21.23 所示,选择“ Ant 构建”来运行 Ant 。
    图 21.23  运行“ Ant 构建”
    运行“ Ant 构建”后的结果如下图 21.23 - 26 所示。
    图 21.24  控制台的输出
    图 21.25  输出文件的目录结构图
    图 21.26  输出的 API 文档效果图
    4 、运行打包结果
    除了清单文件 MANIFEST.MF 之外, myswt.jar 文件和 21.1 节所得的 myswt.jar 一样。本节没有创建 run.bat 批处理文件,而是用下图 21.27 所示的“右击 myswt.jar ->打开方式-> javaw ”的方式来运行 myswt.jar 。
    图 21.27  运行 myswt.jar
     
  • 相关阅读:
    js正则表达式中的问号使用技巧总结
    380. Insert Delete GetRandom O(1)
    34. Find First and Last Position of Element in Sorted Array
    162. Find Peak Element
    220. Contains Duplicate III
    269. Alien Dictionary
    18. 4Sum
    15. 3Sum
    224. Basic Calculator
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/huangmr0811/p/5571009.html
Copyright © 2011-2022 走看看