MyEclipse使用Ant打包项目

本章主要介绍如何使用ant打包发布项目。

ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。在实际软件开发中,有很多地方可以用到ant。

优点
ant 是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点:
1、跨平台性:Ant是纯Java语言编写的,所以具有很好的跨平台性。
2、操作简单:Ant是由一个内置任务和可选任务组成的,用ant任务就像是在dos中写命令行一样。Ant运行时需要一个XML文件(构建文件)。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。
3、维护简单、可读性好、集成简单:由于Ant构建文件 时XML格式的文件,所以很容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。

ant可以使用单独的ant安装,或者直接使用IDE集成的ant插件(我们只需要写ant的build.xml文件就可以执行ant打包任务)

以下是Java的Web项目实例程序,通过使用Myeclipse集成的ant执行打包任务,主要介绍build.xml配置规则。

代码结构:

关键代码:

build.properties

#appserver.lib是tomcat的library
appserver.lib=D\:\\library\\develop\\tomcat6\\lib
#antwebproj.lib是antproj项目的library
antwebproj.lib=D\:\\library\\develop\\struts2\\base

#项目打包版本
version.num=1.0

build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="usage" name="antproj">
    <!-- 引入配置文件 -->
    <property file="build.properties" />
    <!-- 配置引用属性 -->
    <property name="src.dir" value="src" />
    <property name="config.dir" value="config" />
    <property name="build.dir" value="build" />
    <property name="web.dir" value="WebRoot" />
    <property name="name" value="antproj" />

    <path id="master-classpath">
        <!-- We need the servlet API classes: -->
        <!--  * for Tomcat 5/6 use servlet-api.jar -->
        <!--  * for other app servers - check the docs -->
        <fileset dir="${appserver.lib}">
            <include name="*.jar" />
        </fileset>
        <fileset dir="${antwebproj.lib}">
            <include name="*.jar" />
        </fileset>
        <pathelement path="${build.dir}" />
    </path>

    <target name="usage">
        <!-- 输出信息到控制台中 -->
        <echo message="" />
        <echo message="${name} build file" />
        <echo message="-----------------------------------" />
        <echo message="" />
        <echo message="Available targets are:" />
        <echo message="" />
        <echo message="build     --> Build the application" />
        <echo message="" />
    </target>

    <!-- 编译生成class文件 -->
    <target name="build"
        description="Compile main source tree java files">

        <!-- 删除编译存放的classes文件 -->
        <delete dir="${build.dir}/classes"></delete>
        <!-- 新建编译存放的classes文件 -->
        <mkdir dir="${build.dir}/classes" />
        <copy todir="${build.dir}/classes">
            <!-- 将项目中除会编译生成class文件的java文件之外其他类型的文件拷贝到对应的目录下,指定文件名后缀 -->
            <fileset dir="${src.dir}">
                <include name="**/*.properties" />
                <include name="**/*.xml" />
                <!-- 这个是不包含
                <exclude/>
                 -->
            </fileset>
            <fileset dir="${config.dir}">
                <include name="**/*.properties" />
                <include name="**/*.xml" />
            </fileset>
        </copy>
        <!-- java编译 -->
        <javac destdir="${build.dir}/classes" source="1.5" target="1.5"
            debug="true" deprecation="false" optimize="false" failonerror="true"
            encoding="utf-8">
            <src path="${src.dir}" />
            <!-- 编译所需要的jar包路径 -->
            <classpath refid="master-classpath" />
        </javac>
    </target>

    <target name="jar" depends="build"
        description="Compress the java class files to jar">

        <mkdir dir="${build.dir}/jar" />
        <delete file="${build.dir}/jar/${name}.jar" />
        <buildnumber file="${build.dir}/buildnum.txt" />
        <!-- 指定时间戳 可以调用TODAY -->
        <tstamp>
            <format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" />
        </tstamp>

        <!-- 生成清单文件 -->
        <manifest file="${build.dir}/MANIFEST.MF">
            <attribute name="Built-By" value="${user.name}" />
            <attribute name="Implementation-Version"
                value="${version.num}.${build.number}" />
            <attribute name="Built-Date" value="${TODAY}" />
        </manifest>

        <!-- 打包jar -->
        <!-- includes 包含哪些后缀文件 空格分隔 -->
        <jar destfile="${build.dir}/jar/${name}.jar"
            basedir="${build.dir}/classes"
            includes="**/*.class **/*.properties **/*.xml"
            manifest="${build.dir}/MANIFEST.MF">
            <zipfileset dir="${antwebproj.lib}">
                <include name="*.jar"/>
            </zipfileset>
        </jar>
    </target>

    <!-- depends指的是执行该任务,会先执行那个任务 -->
    <target name="deploywar" depends="build"
        description="Deploy application as a WAR file">
        <!-- 指定时间戳 可以调用VERSIONDAY -->
        <tstamp>
            <format property="VERSIONDAY" pattern="yyyyMMdd" />
        </tstamp>
        <delete file="${build.dir}/war/${name}.war" />
        <!-- 删除WEB路径下的jar包 -->
        <delete file="${web.dir}/WEB-INF/lib/*.jar" />
        <mkdir dir="${build.dir}/war" />

        <copy overwrite="true" todir="${web.dir}/WEB-INF/lib">
            <!-- 将实际的jar包拷到WEB路径下 -->
            <fileset dir="${antwebproj.lib}">
                <include name="*.jar" />
            </fileset>
        </copy>

        <!-- 将之前编译生成的classes路径下的编译结果拷贝到WEB路径下 -->
        <copy todir="${web.dir}/WEB-INF/classes" overwrite="true">
            <fileset dir="${build.dir}/classes"></fileset>
        </copy>
        <!-- 删除版本文件 -->
        <delete file="${src.dir}/com/alfred/VersionResources.properties"  />
        <!-- 重新写入版本文件 -->
        <echo
            file="${web.dir}/WEB-INF/classes/com/alfred/VersionResources.properties"
            message="antproj.version=v${version.num}.${build.number}.${VERSIONDAY}" />
        <echo file="${src.dir}/com/alfred/VersionResources.properties"
            message="antproj.version=v${version.num}.${build.number}.${VERSIONDAY}" />

        <!-- 打包war -->
        <war destfile="${name}.war"
            webxml="${web.dir}/WEB-INF/web.xml">
            <fileset dir="${web.dir}">
                <!-- 包括哪些文件 -->
                <include name="**/*.*" />
                <!-- 不包括哪些文件 -->
                <exclude name="**/documents/**" />
                <exclude name="**/logs/*.log" />
            </fileset>
        </war>

        <!-- 将war包拷贝到build的war目录下 -->
        <copy todir="${build.dir}/war" preservelastmodified="true">
            <fileset dir=".">
                <include name="*.war" />
            </fileset>
        </copy>

        <delete>
            <fileset file="${web.dir}/WEB-INF/lib/*.jar" />
            <fileset file="./*.war" />
            <fileset dir="${build.dir}/classes" includes="**/*.*" />
        </delete>
    </target>

    <target name="cleanup">
        <!-- 删除编译文件夹下的所有文件(不包括编译文件夹下的文件夹)
        <delete>
            <fileset dir="${build.dir}/classes" includes="**/*.*" />
        </delete>
         -->
        <!-- 删除编译文件夹 -->
        <delete dir="${build.dir}/classes" />
    </target>
</project>

右键build.xml执行jar和deploywar任务后,在build目录下生成jar包以及war包,打包结果如下:

ant脚本说明:使用节点、元素和属性、命令指令

1、project 节点元素

project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。

● name 属性:用于指定 project 元素的名称。

● default 属性:用于指定 project 默认执行时所执行的 target 的名称。

● basedir 属性:用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录作为基准目录。

<?xml version="1.0" ?>
<project name="ant-project" default="print-dir" basedir=".">
    <target name="print-dir">
        <echo message="The base dir is: ${basedir}" />
    </target>
</project>

2、target节点元素

target为ant的基本执行单元或是任务,它可以包含一个或多个具体的单元/任务。多个target 可以存在相互依赖关系。它有如下属性:

● name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。

● depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target ,被依赖的target 会先执行。

● if 属性:用于验证指定的属性是存在,若不存在,所在 target 将不会被执行。

● unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。

● description 属性:该属性是关于 target 功能的简短描述和说明。

<?xml version="1.0" ?>
<project name="ant-target" default="print">
    <target name="version" if="ant.java.version">
        <echo message="Java Version: ${ant.java.version}" />
    </target>
    <target name="print" depends="version" unless="docs">
        <description>
            a depend example!
        </description>
        <echo message="The base dir is: ${basedir}" />
    </target>
</project>

运行的是名为 print的target ,由于它依赖于version这个target任务,所以 version将首先被执行,同时因为系统配置了JDK,所以 ant.java.version 属性存在,执行了version,输出信息:"[echo] Java Version: 1.6 ",version执行完毕后,接着执行 print,因为docs不存在,而unless属性是在不存在时进入所在target 的,由此可知 print得以执行。

3、property属性节点元素

property元素可看作参量或者参数的定义,project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引:

<property file="build.properties"/>

property 元素可用作 task 的属性值。在 task 中是通过将属性名放在${属性名}之间,并放在 task 属性值的位置来实现的。

Ant 提供了一些内置的属性,它能得到的系统属性的列表与 Java 文档中 System.getProperties() 方法得到的属性一致,这些系统属性可参考 sun 网站的说明。同时, Ant 还提供了一些它自己的内置属性,如下:

basedir: project 基目录的绝对路径;  
ant.file: buildfile的绝对路径;

ant.version: Ant 的版本信息;

ant.project.name: 当前指定的project的名字,即前文说到的project的name属性值;

ant.java.version: Ant 检测到的JDK版本,本文为 1.6 。

<project name="ant-project" default="example">
    <property name="name" value="jojo" />
    <property name="age" value="25" />
    <target name="example">
        <echo message="name: ${name}, age: ${age}" />
    </target>
</project>

4、copy命令

copy主要用来对文件和目录的复制功能。举例如下:

● 复制单个文件:

<copy file="old.txt" tofile="new.txt"/>

● 对文件目录进行复制:

<copy todir="../dest_dir">

    <fileset dir="src_dir"/>

</copy>

● 将文件复制到另外的目录:

<copy file="src.txt" todir="c:/base"/>

5、delete命令

对文件或目录进行删除,举例如下:

● 删除某个文件:   
<delete file="/res/image/cat.jpg"/>

● 删除某个目录:   
<delete dir="/res/image"/>

● 删除所有的jar文件或空目录:

<delete includeEmptyDirs="true">

       <fileset dir="." includes="**/*.jar"/>

</delete>

6、 mkdir 命令

创建目录。

<mkdir dir="/home/philander/build/classes"/>

7、 move 命令

移动文件或目录,举例如下:

● 移动单个文件:

<move file="sourcefile" tofile=”destfile”/>

● 移动单个文件到另一个目录:

<move file="sourcefile" todir=”movedir”/>

● 移动某个目录到另一个目录:

<move todir="newdir">

    <fileset dir="olddir"/>

</move>

8、echo 命令

该任务的作用是根据日志或监控器的级别输出信息。它包括 message 、 file 、 append 和 level 四个属性,举例如下

<echo message="ant message" file="/logs/ant.log" append="true">

9、jar 标签节点元素

该标签用来生成一个JAR文件,其属性如下。

● destfile表示JAR文件名。

● basedir表示被归档的文件名。

● includes表示别归档的文件模式。

● exchudes表示被排除的文件模式。

● compress表示是否压缩。

<jar destfile="${webRoot}/${ash_jar}" level="9" compress="true" encoding="utf-8" basedir="${dest}">
    <manifest>
        <attribute name="Implementation-Version" value="Version: 2.2"/>
    </manifest>
</jar>

上面的mainfest是jar包中的MEAT-INF中的MANIFEST.MF中的文件内容

同样打包操作的的还有war、tgz,已经解压操作uzip

<!-- 创建zip -->
<zip basedir="${basedir}\classes" zipfile="temp\output.zip"/>
<!-- 创建tgz -->
<gzip src="classes\**\*.class" zipfile="output.class.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!-- 建立war包 -->
<war destfile="${webRoot}/ash.war" basedir="${basedir}/web" webxml="${basedir}/web/WEB-INF/web.xml">
    <exclude name="WEB-INF/classes/**"/>
    <exclude name="WEB-INF/lib/**"/>
    <exclude name="WEB-INF/work/_jsp/**"/>
    <lib dir="${lib.dir}" includes="**/*.jar, **/*.so, **/*.dll">
        <exclude name="${webRoot}\${helloworld_jar}"/>
    </lib>
    <lib file="${webRoot}/${helloworld_jar}"/>
    <classes dir="${dest}" includes="**/*.xml, **/*.properites, **/*.xsd"> </classes>
</war>

10、javac 标签节点元素

该标签用于编译一个或一组java文件,其属性如下。

● srcdir表示源程序的目录。

● destdir表示class文件的输出目录。

● include表示被编译的文件的模式。

● excludes表示被排除的文件的模式。

● classpath表示所使用的类路径。

● debug表示包含的调试信息。

● optimize表示是否使用优化。

● verbose 表示提供详细的输出信息。

● fileonerror表示当碰到错误就自动停止。

<javac srcdir="${src}" destdir="${dest}"/>
<!-- 设置jvm内存
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="128m"/>
-->

11、java 标签节点元素

该标签用来执行编译生成的.class文件,其属性如下。

● classname 表示将执行的类名。

● jar表示包含该类的JAR文件名。

● classpath所表示用到的类路径。

● fork表示在一个新的虚拟机中运行该类。

● failonerror表示当出现错误时自动停止。

● output 表示输出文件。

● append表示追加或者覆盖默认文件。

<java classname="com.hoo.test.HelloWorld" classpath="${hello_jar}"/>

12、arg 数据参数元素

由Ant构建文件调用的程序,可以通过<arg>元素向其传递命令行参数,如apply,exec和java任务均可接受嵌套<arg>元素,可以为各自的过程调用指定参数。以下是<arg>的所有属性。

● values 是一个命令参数。如果参数中有空格,但又想将它作为单独一个值,则使用此属性。

● file 表示一个参数的文件名。在构建文件中,此文件名相对于当前的工作目录。

● line 表示用空格分隔的多个参数列表。

● 表示路径,一个作为单个命令行变量的path-like的字符串;或作为分隔符,Ant会将其转变为特定平台的分隔符。

● pathref 引用的path(使用path元素节点定义path)的id

● prefix 前缀

● suffix 后缀

<!-- 一个含有空格的单个的命令行变量。 -->
<arg value="-l -a"/>
<!-- 两个空格分隔的命令行变量。  -->
<arg line="-l -a"/>
<!-- 一个命令行变量,其值在DOS系统上为\dir;\dir2;\dir3;在Unix系统上为/dir:/dir2:/dir3 。 -->
<arg path="/dir;/dir2:\dir3"/>

13、ervironment 类型

由Ant构建文件调用的外部命令或程序,<env>元素制定了哪些环境变量要传递给正在执行的系统命令,<env>元素可以接受以下属性。

● file表示环境变量值的文件名。此文件名要被转换位一个绝对路径。

● path表示环境变量的路径。Ant会将它转换为一个本地约定。

● value 表示环境变量的一个直接变量。

● key 表示环境变量名。

注意 file path 或 value只能取一个。

14、filelist 文件集合列表

filelist 是一个支持命名的文件列表的数据类型,包含在一个filelist类型中的文件不一定是存在的文件。以下是其所有的属性。

● dir是用于计算绝对文件名的目录。

● files 是用逗号分隔的文件名列表。

● refid 是对某处定义的一个<filelist>的引用。

注意 dir 和 files 都是必要的,除非指定了refid(这种情况下,dir和files都不允许使用)。

<filelist id="docfiles" dir="${doc.src}" files="foo.xml,bar.xml"/>
<!-- 文件集合 ${doc.src}/foo.xml和${doc.src}/bar.xml. 这些文件也许还是不存在的文件.-->
<filelist id="docfiles" dir="${doc.src}" files="foo.xml bar.xml"/> 

<filelist refid="docfiles"/> 

<filelist id="docfiles" dir="${doc.src}">
    <file name="foo.xml"/>
    <file name="bar.xml"/>
</filelist>

15、fileset 文件类型

fileset 数据类型定义了一组文件,并通常表示为<fileset>元素。不过,许多ant任务构建成了隐式的fileset,这说明他们支持所有的fileset属性和嵌套元素。以下为fileset 的属性列表。

● dir表示fileset 的基目录。

● casesensitive的值如果为false,那么匹配文件名时,fileset不是区分大小写的,其默认值为true.

● defaultexcludes 用来确定是否使用默认的排除模式,默认为true。

● excludes 是用逗号分隔的需要派出的文件模式列表。

● excludesfile 表示每行包含一个排除模式的文件的文件名。

● includes 是用逗号分隔的,需要包含的文件模式列表。

● includesfile 表示每行包括一个包含模式的文件名。

<fileset id="lib.runtime" dir="${lib.path}/runtime">
    <include name="**/*.jar"/>
    <include name="**/*.so"/>
    <include name="**/*.dll"/>
</fileset>

<fileset id="lib.container" dir="${lib.path}/container">
    <include name="**/*.jar"/>
</fileset>

<fileset id="lib.extras" dir="${lib.path}">
    <include name="test/**/*.jar"/>
</fileset>

16、patternset 类型

fileset 是对文件的分组,而patternset是对模式的分组,他们是紧密相关的概念。

<patternset>支持4个属性:includes、excludex、includexfile、excludesfile,这些与fileset相同。

patternset 还允许以下嵌套元素:include,exclude,includefile 和 excludesfile.

<!-- 黑白名单 -->
<patternset id="non.test.sources">
  <include name="**/*.java"/>
  <!-- 文件名包含Test的排除 -->
  <exclude name="**/*Test*"/>
</patternset>

<patternset id="sources">
  <include name="std/**/*.java"/>
  <!-- 判断条件 存在professional就引入 -->
  <include name="prof/**/*.java" if="professional"/>
  <exclude name="**/*Test*"/>
</patternset>

<!-- 一组文件 -->
<patternset includesfile="some-file"/>
<patternset>
  <includesfile name="some-file"/>
<patternset/>

<patternset>
  <includesfile name="some-file"/>
  <includesfile name="${some-other-file}" if="some-other-file"/>
<patternset/>

17、filterset 类型

filterset定义了一组过滤器,这些过滤器将在文件移动或复制时完成文件的文本替换。

主要属性如下:

● begintoken 表示嵌套过滤器所搜索的记号,这是标识其开始的字符串。

● endtoken 表示嵌套过滤器所搜索的记号这是标识其结束的字符串。

● id 是过滤器的唯一标志符。

● refid 是对构建文件中某处定义一个过滤器的引用。

<!-- 将目标文件build.dir目录中的version.txt文件内容中的@[email protected]替换成TODAY当前日期的值,并把替换后的文件存放在dist.dir目录中 -->
<copy file="${build.dir}/version.txt" toFile="${dist.dir}/version.txt">
  <filterset>
    <filter token="DATE" value="${TODAY}"/>
  </filterset>
</copy>

<!-- 自定义变量的格式 -->
<copy file="${build.dir}/version.txt" toFile="${dist.dir}/version.txt">
  <!-- 从version.txt中的%位置开始搜索,到*位置结束,进行替换内容中的@[email protected]替换成TODAY当前日期的值-->
  <filterset begintoken="%" endtoken="*">
    <filter token="DATE" value="${TODAY}"/>
  </filterset>
</copy>

<!-- 使用外部的过滤定义文件 -->
<copy toDir="${dist.dir}/docs">
  <fileset dir="${build.dir}/docs">
    <include name="**/*.html">
  </fileset>
  <filterset begintoken="%" endtoken="*">
    <!-- 过来文件从外部引入,过来的属性和值配置在dist.properties文件中 -->
    <filtersfile file="${user.dir}/dist.properties"/>
  </filterset>
</copy>

<!-- 使用引用方式,重复利用过滤集 -->
<filterset id="myFilterSet" begintoken="%" endtoken="*">
  <filter token="DATE" value="${TODAY}"/>
</filterset>

<copy file="${build.dir}/version.txt" toFile="${dist.dir}/version.txt">
  <filterset refid="myFilterSet"/>
</copy>

18、path类型

path元素用来表示一个类路径,不过它还可以用于表示其他的路径。在用作几个属性时,路经中的各项用分号或冒号隔开。在构建的时候,此分隔符将代替当前平台中所有的路径分隔符,其拥有的属性如下。

● location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。

● refid 是对当前构建文件中某处定义的一个path的引用。

● path表示一个文件或路径名列表。

<path id="buildpath">
    <fileset refid="lib.runtime"/>
    <fileset refid="lib.container"/>
    <fileset refid="lib.extras"/>
</path>

<path id="src.paths">
    <fileset id="srcs" dir=".">
        <include name="src/**/*.java"/>
    </fileset>
</path>

以上是部分ant的配置项说明,如果需要其他相关配置,可以查询ant的帮助文档。

时间: 2024-10-10 03:06:35

MyEclipse使用Ant打包项目的相关文章

使用ant编译项目技巧

ant编译时指定jdk的版本 系统的jdk版本是1.6,而项目使用的jdk版本是1.5,所以在编译时需要指定jdk的版本为1.5,可以使用下面的方法为javac 任务指定fork和executable,是用指定编译器编译,这个方法更灵活,您甚至可以指定非sun公司的java编译器.详见:6.5节 编译时忽略指定的java文件 在编译时可能有的包下面的java文件不需要编译,那么就可以使用这个用法,详见:6.5节 打包时忽略指定的class文件 在打包时可能有的class文件不想打入到包中,那么就

使用ANT打包Android应用

大家好,今天来分享一下如何使用ANT打包Android应用. 通常我们习惯用eclipse来开发Android程序,它会自动帮我们打包当前的应用程序.如果在Navigator视图下,我们可以看到以下几个文件: 在上图中,com包放置的是我们的class文件,classes.dex是class文件经过转换后的可以在dalvik上跑的精简类文件,resources.ap_是经过打包的资源文件,ant.apk就是最终的打包文件. 使用ANT来对应用打包,一般会经过以下几个步骤: 1.用aapt命令生成

Ant打包可运行的Jar包(加入第三方jar包)

本章介绍使用ant打包可运行的Jar包. 打包jar包最大的问题在于如何加入第三方jar包使得jar文件可以直接运行.以下用一个实例程序进行说明. 程序结构: 关键代码: package com.alfred.main; import com.alfred.bean.User; import com.alfred.util.ProjConfig; import com.thoughtworks.xstream.XStream; public class Main { public static

使用SDK自带Ant打包生成Apk

由于想要实现一个从前端编辑然后后台自动生产APK的平台,首先需要搞定自动生成APK的功能.在研究了APK生成的7个步骤后发现稍微复杂一点的程序特别是res文件夹有子文件夹的就无法直接用sdk命令实现,于是选择使用Ant实现,开始是打算用原生Ant,也就是需要自己写build.xml,在尝试了多次之后发现里面有几个暂时无法解决的BUG:一是在编译时会报android.support.annotation找不到包,二是生成dex文件时会报already added错误,第一个错误可以通过修改程序勉强

Android Ant打包笔记

本文文档的下载地址(Word版):http://download.csdn.net/detail/yangwei19680827/7250711 Android Ant 打包 网上找了ant打包的资料似乎都太复杂.事实上android都给我们做好了.除了多渠道打包外 1.  注意事项 本文有几个文件夹不要弄错 SDK文件夹.本文在F:\android-sdk-windows Ant文件夹,本文在E:\apache-ant-1.9.2 代码路径,指向你代码的文件夹.即workspace中项目的文件

Ant 打包 问题

Ant 打包问题及解决归纳总结: 1.build.xml注意设置basedir: <project name="s2si"  default="dist" basedir="."> --->>这里basedir="."意思是基础目录是与build.xml同级目录,比如说src或 s2si,后续新建目录都是在此基础上进行,为了方便打包,可以根据自己需要放置 build.xml,比如我就放在了工程s2si根

Ant打包APK

环境背景: 系统:ubuntu 14.10 Eclipse:4.4.1 ADT:23.4 Ant:1.9.4 1.首先当然还是先去安装ant.网上有很多教程,这里就不废话了,自己去下载.安装完毕还需要配置环境变量. 2.在终端(windows下cmd)打开到android sdk的tools目录,例如我的项目是在/home/arjinmc/Example,那么在终端中输入 android update project -p /home/arjinmc/Example -t "android-17

Eclipse打包项目

总体思路是先打成jar再把jar打成exe.使用了1.2与2.3没有问题成功完成. 1.将项目打成jar: 1.1 要将项目打包成jar文件,方法很多,可以用Eclipse自带的打包工具Ant打包,也可以用Eclipse的Export生成jar.经过尝试后,我 不推荐用Ant打包,因为要自己编写xml脚本语言,还要增加一些外部的jar,所以我打了好几次都没打成. 1.2 在这里介绍两种方法生成jar,第一种是用Eclpise的Export功能.在要打包的项目上击右键,选择Export,在窗口中选

Android Ant打包及其环境变量配置

之前打包项目使用蓝贝壳打包,或者用Eclipse自带的环境打包,或者直接扔给第三方给别人打包(这里是指的爱加密打包).接下来老于就带你们走进ant打包的时代. 每次完成一个应用后.就要上市场.上市场呢就要有很多的渠道.有很多的渠道呢.意味着要打很多个渠道包.我哩个去. 记得有个项目.100多个渠道.打到手软.回去飞机打不起来了.android就是这么屌丝.不像ios高富帅一样.就打几个而已. 以前一直认为ant自动渠道打包很复杂.其实说难也不难.说复杂也不复杂.最要就是配置环境问题.环境配好了.