当前位置:首页 » 编程软件 » ant编译泛型

ant编译泛型

发布时间: 2023-05-27 09:22:49

㈠ Eclipse中报错的解决方案

Eclipse中报错 要了解详细信息 请使用 xlint:unchecked重新编译 的解决方案 一 遇到问题 用ant执行jasperreport的samplescharts示例的build xml时 无法编译 提示错误如下 javac:[javac]Compiling sourcefilestoE:jiangcmworkspace forict [javac]注意 E:jiangcmworkspace forict ChartsApp java使用了未经检查或不安全的操作 [javac]注意 要了解详细信息 请使用 Xlint:unchecked重新编译 二 查了一下资料 知道是泛型的原因 网上查到的解决方案主要有以下几种 编译时带上参数 source 使用@SupressWarnings( unchecked )注释 更新你的代码 使用List<Object> List<Object>的实例能接受任何类型的对象 就像是一个原型List 然而 编译器不会报错 (以上三种方法来源 l) 如果你用的Ant 使用build xml编译的话 可以右击宴镇build xml文件 >执行 >构成和执行 选择参数 在《程序参数》里面输入 xlint:unchecked即可; 找到build xml里面类似的语句 加上一句话 <! JavaCompile ><targetname= pile depends= init ><javacsrcdir= src destdir= ${classdir} deprecation= on encoding= Windows J debug= on includes= **/jp/** ><pilerargvalue= Xlint:unchecked />`<! 就是这句话!! ><classpathrefid= project class path /></javac></target>(以上两种方法来源 ) 三 自己的试验与结论 第一种 编译时带上参数 source 使用方法 找到build xml里面类似的语句 加上一句话 <javacsrcdir= ${src dir} destdir= ${classes dir} ><classpathrefid= classpath /><pilerargline= source />`<! 就是这句话!注意与第五种方式不同的是line标签而不是value! ></javac>编译通局谈过 charts下的报表出现了!第二种 使用@SupressWarnings( unchecked )注释 在ChartsApp java的main函数前加上了这个注释 但是没有起作用 提示错误依然是 [javac]注意 要了解详细信息 请使用 Xlint:unchecked重新编译 怎么回事呢?在一篇文章中找到了答案 l在撰写本文时候 javac并不支持@SuppressWarnings的注解 期望在Java 中得到支持 晌腊粗第三种 更改代码为泛型使用方式 原来的代码 Mapparameters=newHashMap();parameters put( MaxOrderID newInteger( ));更改后的代码 Map<String Integer>parameters=newHashMap<String Integer>();parameters put( MaxOrderID newInteger( ));或者 Map<Object Object>parameters=newHashMap<Object Object>();parameters put( MaxOrderID newInteger( ));更改后 顺利通过编译 也能看到报表了!!第四种 经验证无效 第五种 <javacsrcdir= src destdir= ${classdir} deprecation= on encoding= Windows J debug= on includes= **/jp/** ><pilerargvalue= Xlint:unchecked />`<! 就是这句话!! ><classpathrefid= project class path /></javac>加上 <pilerargvalue= Xlint:unchecked /> 后 出现 警告 不过编译顺利通过 也能看到报表了!编译提示如下 [javac]Compiling sourcefilestoE:jiangcmworkspace forict [javac]E:jiangcmworkspace forict ChartsApp java: :警告 [unchecked]对作为普通类型java util Map的成员的put(K V)的调用未经检查[javac]parameters put( MaxOrderID newInteger( ));[javac]^[javac] 警告呵呵 答案是丰富多彩的 条条大道通罗马 这次不仅解决了问题 还找到了四种解决问题的方法 参考资料 J SE 中的泛型作者 BudiKurniawanl Eclipse中报jsp中有错误 要了解详细信息 请使用 xlint:unchecked重新编译 具体在菜单上怎么操作? 泛型类型 第一部分作者:DavidFlanaganl 有关ant的faqQ Howtopass Xlintor Xlint:uncheckedto javactask?A:passitaspilerargnested<pilerarg>tospecify <pilerargvalue= Xlint /><! or ><pilerargvalue= Xlint:unchecked /> lishixin/Article/program/Java/ky/201311/28243

㈡ ant是什么意思 解析ant的含义和用法

在Java项目中,Ant通常用于构建、编译、打包和部署,具体的使用方法如下:

4. 部署:Ant可以自动部署Java应用程序,支持多种部署方式,如FTP、SSH、SCP等。

Ant的使用方法非常简单,只需要编写一个Ant脚本文件(通常是build.xml),然后使用Ant命令运行即可。Ant的脚本文念笑樱件主要由一系列任务(Task)组成,每个任务都是一个独立的操作单元,可以完成不同的构建任务。Ant提供了很多内置任务,如编译Java代码、打包成JAR文件、生成文档等,同时也支持自定义任务,可以根据项目需要编写自己的任务。

3. 打包:Ant可以将Java代码打包成JAR文件、WAR文件等,可以指定打包的文件名、文件路径、文件类型等。

Ant的使用方法非常简单,只需要编写一个Ant脚本文件(通常是build.xml),然后使用Ant命令运行即可。Ant的脚本文件主要由一系列任务(Task)组成,每个任务都是一个独立的操作单元,可以完成不同的构建任务。Ant提供了很多内置任务,如编译Java代码、打包成JAR文件、生成文档等,同时也升羡支持自定义任务,可以根据项目需要编写自己的任务。

4. 部署:Ant可以自动部署Java应用程序,支持多种部署方式,如FTP、仔丛SSH、SCP等。

㈢ ant 打包编译过程报错:不兼容的类型

说明源文件有的不 是utf-8编码的,应该修改源文件的编码。。。。。。。。。。。。
Haskell

㈣ 如何使用ANT在命令行进行编译和测试

一、环境变量
在网上找到ANT的压缩包,解压缩以后放到C盘根目录如下图

对,就是这个鬼样子,放在这里就可以用了,不用安装之类的
环境变量如下图:

你要定义ANT_HOME,然后让系统path找到这个ANT_HOME就行了

二、写build.xml

你的目录结构如下图:

源文件 放在src
引用的jar包放在lib
编译结果安排在classes

接下来就是build.xml了
如下,自己看吧

[html] view plain
<?xml version="1.0"?>
<project name="pojo_0428" default="prepare" basedir=".">

<property name="source.root" value="src"/>
<property name="class.root" value="classes"/>
<property name="lib.dir" value="lib"/>

<!-- class path for compilation and execution -->
<path id="basepath">
<!-- 运行时 class文件的位置 -->
<pathelement location="${class.root}" />
<!-- jar包 -->
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</path>

<!--默认的target -->
<target name="prepare">
<delete dir="${class.root}"/>
<mkdir dir="${class.root}"/>
</target>

<!--编译 -->
<target name="compile" depends="prepare">
<javac srcdir="${source.root}"
destdir="${class.root}"
debug="on"
optimize="off"
deprecation="on">
<classpath refid="basepath"/>
</javac>
</target>
<!--执行。 案例程序的入口 依赖 compile -->
<target name="run" depends="compile">
<java classname="com.javathink.Student" fork="true">
<classpath refid="basepath"/>
</java>
</target>

</project>

㈤ ant编译build.xml文件

折腾了大半天,可算捣腾出来了,这里需要提醒注意如下几点:

1、如果jdk是1.6及以下,则需要使用的ant版本是1.9.x;

2、如果jdk是1.8,则需要使用ant版本是1.10.x;

3、可用eclipse导出war包,将lib目录下的jar包放到一个目录下,然后直接引用,避免遗漏掉jar包没导入进去。

以下是build.xml文件内容,安装好ant后,直接执行ant build.xml即可打包。

<?xml version="1.0" encoding="UTF-8"?>

<!-- 定义一个工程,默认任务为warFile。 -->

<project name="bing-info" default="warFile" basedir=".">

    <!-- 指定jdk 貌似这里指定也没什么用~-->

    <property name="env.JAVA_HOME" value="C:/Program Files/Java/jdk1.8.0_101"/>

    <!-- 定义属性,打成war包的名称。 -->

    <property name="warFileName" value="nbAPP.war"></property>

    <!-- 指定war包路径及依赖包路径   这里需要指定工程的路径 -->

    <property name="compilePath" value="D:/project/nbAPP"/>

    <!-- 定义路径,编译java文件时用到的jar包。 -->

    <path id="project.lib">

        <fileset dir="${basedir}/lib">

            <include name="**/*.jar"/>

        </fileset>

    </path>

    <!-- 定义任务,清空任务:清空原有的class文件,创建新的build路径。 -->

    <target name="clean">

        <delete dir="${compilePath}/build" />

        <mkdir dir="${compilePath}/build" />

    </target>

    <!-- 定义任务,编译src文件夹中的java文件,编译后的class文件放到创建的文件夹下。 -->

    <target name="compile" depends="clean">

        <javac srcdir="${basedir}/src/main" debug="true" includeantruntime="false" encoding="UTF-8" >

            <classpath refid="project.lib">

            </classpath>

        </javac>

    </target>

    <!-- 定义默认任务,将class文件集合成jar包。 -->

    <target name="warFile" depends="compile">

        <!-- 删除原有war包。 -->

        <delete dir="${compilePath}/${warFileName}" />

        <!-- 建立新war包。 -->

        <war destfile="${compilePath}/${warFileName}" webxml="${basedir}/WebRoot/WEB-INF/web.xml">

            <!-- 将非jar和非class文件拷贝到war包的对应路径下。 -->

            <fileset dir="${basedir}/WebRoot">

                <include name="**/**.*" />

                <exclude name="**/*.jar"/>

                <include name="WEB-INF/classes/**"/>

            </fileset>

            <!-- 将jar和class文件拷贝到war包的对应路径下。 -->

            <lib dir="${compilePath}/lib" />

            <classes dir="${compilePath}/build" />

            <!-- 将资源文件拷贝进war对应路径下 -->

            <classes dir="${basedir}/src/main/resources" />

        </war>

    </target>

</project>

㈥ Java升级篇:ANT十五大最佳实践详解

在Ant出现之前 构建和部署Java应用需要使用包括特定平台的脚本 Make文件 各种版本的IDE甚至手工操作的 大杂烩 现在 几乎所有的开源Java项目都在使用Ant 大多数袭消手公司的内部项目也在使用Ant Ant在这些项目中的广泛使用自然导致了读者对一整套Ant最佳实践的迫切需求 本文总结了我喜爱的Ant技巧或最佳实践 多数是从我亲身经历的项目错误或我听说的其他人经历的 恐怖 故事中得到灵感的 比如 有人告诉我有个项目把XDoclet 生成的代码放入带有锁定文件功能的版本控制工具中 当开发者修改源代码时 他必须记住手工检出(Check out)并锁定所有将要重新生成的文件 然后 手工运行代码生成器 只到这时他才能够让Ant编译代码 这一方法还存在如下一些问题 生成的代码无法存储在版本控制系统中 Ant(本案例中是Xdoclet)应该自动确定下一次构建涉及的源文件 而不应由程序员手工确定 Ant的构建文件应该定义好正确的任务依赖关系 这样程序员就不必为了完成构建而不得不按照特定顺序调用任务 当我开始一个新项目时 我首先编写Ant构建文件 Ant文件明确地定义构建的过程 并被团队中的每个程序员使用 本文所列的技巧基于这样的假定 Ant构建文件是一个必须仔细编写的重要文件 它应在版本控制系统中得到维护 并被定期进行重构 下面是我的十五大Ant最佳实践 采用一致的编码规范 Ant用户有的喜欢有桥轮的痛恨其构建文件的XML语法 与其跳进这一令人迷惑的争论中 不如让我们先看一些能保持XML构建文件简洁的方法 首先也是最重要的 花费时间格式化你的XML让它看上拍嫌去很清晰 不论XML是否美观 Ant都可以工作 但是丑陋的XML很难令人读懂 倘若你在任务之间留出空行 有规则的缩进 每行文字不超过 列左右 那么XML令人惊讶地易读 再加上使用能够高亮XML语法的优秀编辑器或IDE工具 你就不会有阅读的麻烦 同样 精选含意明确 容易读懂的词汇来命名任务和属性 比如 dir reports就比rpts好 特定的编码规范并不重要 只要拿出一套规范并坚持使用就行 将build xml放在项目根目录中 Ant构建文件build xml可以放在任何位置 但是放在项目顶级目录中可以保持项目简洁 这是最常用的规范 开发者能够在顶级目录中找到预期的build xml 把构建文件放在根目录中 也能够使人容易了解项目目录树中不同目录之间的逻辑关系 以下是一个典型的项目目录层次 [root dir]| build xml+ src+ lib (包含第三方 JAR包)+ build (由 build任务生成)+ dist (由 build任务生成)当build xml在顶级目录时 假设你处于项目某个子目录中 只要输入 ant find pile 命令 不需要改变工作目录就能够以命令行方式编译代码 参数 find告诉Ant寻找存在于上级目录中的build xml并执行 使用单一的构建文件 有人喜欢将一个大项目分解成几个小的构建文件 每个构建文件分担整个构建过程的一小部分工作 这确实是看法不同的问题 但是应该认识到 将构建文件分割会增加对整体构建过程的理解难度 要注意在单一构建文件能够清楚表现构建层次的情况下不要过工程化(over engineer) 即使你把项目划分为多个构建文件 也应使程序员能够在项目根目录下找到核心build xml 尽管该文件只是将实际构建工作委派给下级构建文件 也应保证该文件可用 提供良好的帮助说明 应尽量使构建文件自文档化 增加任务描述是最简单的方法 当你输入ant projecthelp时 你就可以看到带有描述的任务清单 比如 你可以这样定义任务 <target name= pile description= Compiles code output goes to the build dir >最简单的规则是把所有你想让程序员通过命令行就可以调用的任务都加上描述 对于一般用来执行中间处理过程的内部任务 比如生成代码或建立输出目录等 就无法使用描述属性 这时 可以通过在构建文件中加入XML注释来处理 或者专门定义一个help任务 当程序员输入ant help时来显示详细的使用说明 <target name= help description= Display detailed usage information ><echo>Detailed help </echo></target> 提供清除任务 每个构建文件都应包含一个清除任务 用来删除所有生成的文件和目录 使系统回到构建文件执行前的初始状态 执行清空任务后还存在的文件都应处在版本控制系统的管理之下 比如 <target name= clean description= Destroys allgenerated files and dirs ><delete dir= ${dir build} /><delete dir= ${dir dist} /></target>除非是在产生整个系统版本的特殊任务中 否则不要自动调用clean任务 当程序员仅仅执行编译任务或其他任务时 他们不需要构建文件事先执行既令人讨厌又没有必要的清空任务 要相信程序员能够确定何时需要清空所有文件 使用ANT管理任务从属关系 假设你的应用由Swing GUI组件 Web界面 EJB层和公共应用代码组成 在大型系统中 你需要清晰地定义每个Java包属于系统的哪一层 否则任何一点修改都要被迫重新编译成百上千个文件 糟糕的任务从属关系管理会导致过度复杂而脆弱的系统 改变GUI面板的设计不应造成Servlet和EJB的重编译 当系统变得庞大后 稍不注意就可能将依赖于客户端的代码引入到服务端 这是因为典型的IDE项目文件编译任何文件都使用单一的classpath 而Ant能让你更有效地控制构建活动 设计你的Ant构建文件编译大型项目的步骤 首先 编译公共应用代码 将编译结果打成JAR包文件 然后 编译上一层的项目代码 编译时依靠第一步产生的JAR文件 不断重复这一过程 直到最高层的代码编译完成 分步构建强化了任务从属关系管理 如果你工作在底层Java框架上 偶然引用到高层的GUI模板组件 这时代码不需要编译 这是由于构建文件在编译底层框架时在源路径中没有包含高层GUI面板组件的代码 定义并重用文件路径 如果文件路径在一个地方一次性集中定义 并在整个构建文件中得到重用 那么构建文件更易于理解 以下是这样做的一个例子 <project name= sample default= pile basedir= ><path id= mon ><pathelementlocation= ${jdom jar withpath} /> etc</path><path id= classpath client ><pathelement location= ${guistuff jar withpath} /><pathelement location= ${another jar withpath} /><! reuse the mon classpath ><path refid= mon /></path><target name= mon depends= prepare ><javac destdir= ${dir build} srcdir= ${dir src} ><classpathrefid= mon /><includename= /oreilly/mon/** /></javac></target></project>当项目不断增长构建日益复杂时 这一技术越发体现出其价值 你可能需要为编译不同层次的应用定义各自的文件路径 比如运行单元测试的 运行应用程序的 运行Xdoclet的 生成JavaDocs的等等不同路径 这种组件化路径定义的方法比为每个任务单独定义路径要优越得多 否则 很容易丢失任务从属关系的轨迹 定义恰当的任务从属关系 假设dist任务从属于jar任务 那么哪个任务从属于pile任务哪个任务从属于prepare任务呢?Ant构建文件最终定义了任务的从属关系图 它必须被仔细地定义和维护 应该定期检查任务的从属关系以保证构建工作得到正确执行 大的构建文件随着时间推移趋向于增加更多的任务 所以到最后可能由于不必要的从属关系导致构建工作非常困难 比如 你可能发现在程序员只需编译一些没有使用EJB的GUI代码时又重新生成了EJB代码 以 优化 的名义忽略任务的从属关系是另一种常见的错误 这种错误迫使程序员为了得到恰当的结果必须记住并按照特定的顺序调用一串任务 更好的做法是 提供描述清晰的公共任务 这些任务包含正确的任务从属关系 另外提供一套 专家 任务让你能够手工执行个别的构建步骤 这些任务不提供完整的构建过程 但是让那些专家用户在快速而恼人的编码期间能够跳过某些步骤 使用属性 任何需要配置或可能发生变化的信息都应作为Ant属性定义下来 对于在构建文件中多次出现的值也同样处理 属性既可以在构建文件头部定义 也可以为了更好的灵活性而在单独的属性文件中定义 以下是在构建文件中定义属性的样式 <project name= sample default= pile basedir= ><property name= dir build value= build /><property name= dir src value= src /><property name= jdom home value= /java tools/jdom b /><property name= jdom jar value= jdom jar />< lishixin/Article/program/Java/ky/201311/28340

㈦ 使用Ant在编译java类的时候出现以下错误,请问是什么原因呢应该如何解决

泛型类型,javac编译出错,加-source1.5
泛型从1.5以后开始有C:>javac
用法:javac<options><sourcefiles>
其中,可能的选项包括:
-g生成所有调试信息
-g:none不生成任何调试信息
-g:{lines,vars,source}只生成某些调试信息
-nowarn不生成任何警告
-verbose输出有关编译器正在执行的操作的消息
-deprecation输出使用已过时的API的源位置
-classpath<路径>指定查找用户类文件和注释处理程序的位置
-cp<路径>指定查找用户类文件和注释处理程序的位置
-sourcepath<路径>指定查找输入源文件的位置
-bootclasspath<路径>覆盖引导类文件的位置
-extdirs<目录>覆盖所安装扩展的位置
-endorseddirs<目录>覆盖签名的标准路径的位置
-proc:{none,only}控制是否执行注释处理和/或编译。
-processor<class1>[,<class2>,<class3>...]要运行的注释处理程序的名称;绕过默认的搜索进程
-processorpath<路径>指定查找注释处理程序的位置
-parameters生成元数据以用于方法参数的反射
-d<目录>指定放置生成的类文件的位置
-s<目录>指定放置生成的源文件的位置
-h<目录>指定放置生成的本机标头文件的位置
-implicit:{none,class}指定是否为隐式引用文件生成类文件
-encoding<编码>指定源文件使用的字符编码
-source<发行版>提供与指定发行版的源兼容性
-target<发行版>生成特定VM版本的类文件
-profile<配置文件>请确保使用的API在指定的配置文件中可用
-version版本信息
-help输出标准选项的提要
-A关键字[=值]传递给注释处理程序的选项
-X输出非标准选项的提要
-J<标记>直接将<标记>传递给运行时系统
-Werror出现警告时终止编译
@<文件名>从文件读取选项和文件名

㈧ 如何使用Ant来编译Java文件以及如何运行

一、源文件情况
源文件位置为:D:\temp,源文件名(含包名字):com.ldq.WeatherDemo.java

前提:已安装 jdk ,并配置好环境变量。

二、过程
1、编译:
提示符进入 D:\temp 路径下,输入:javac com\ldq\WeatherDemo.java
生成类文件:WeatherDemo.class

2、打包:
提示符进入 D:\temp 路径下,输入:jar cvf WeatherDemo.jar com\ldq\WeatherDemo.class
生成档案文件:WeatherDemo.jar

3、修改 MANIFEST.MF 文件:
由于引用了外部的类,所以要添加引用类的路径,即修改MANIFEST.MF文件。保存如下内容到 D:\temp下,文件名 MANIFEST.MF

Manifest-Version: 1.0
Sealed: true
Main-Class: com.ldq.WeatherDemo
Class-Path: lib/jaxrpc.jar lib/log4j-1.2.8.jar lib/mail.jar lib/saaj.jar lib/tools.jar lib/wsdl4j-1.5.1.jar lib/activation.jar lib/axis.jar lib/axis-ant.jar lib/commons-discovery-0.2.jar lib/commons-logging-1.0.4.jar

注意在后面空两行。
提示符进入 D:\temp 路径下,输入:jar umf MANIFEST.MF WeatherDemo.jar
执行时会提示更新的内容。

4、添加包含引用类的相应文件:
在 D:\temp 路径下,新建 lib 文件夹,讲对应的 jaxrpc.jar ... 拷入其中,此时,即可双击(或在提示符下输入:java -jar WeatherDemo.jar)运行 WeatherDemo.jar 文件了。

三、总结
双击运行 jar 文件时,虚拟机会到 jar 文件中下找 .MF 文件,找到对应的 Main-Class 运行,引入的类在 Class-Path 所指路径。
事实上可以利用 winrar或winzip 工具打开 jar 文件,直接将修改好的 MANIFEST.MF 拷入覆盖,class文件也可以做同样的操作,节省了输入复杂难记的命令。另外,对于 javaME 生成的 jar 文件,限制严格些,MANIFEST.MF 文件中有个文件大小的字段,可以先保存,查看文件大小,再修改保存。
另一种方法是通过 Eclipse - Export - Runnable JAR file 直接生成 jar 文件,此时,所有的引用类都被打包在 jar 文件里了。

㈨ ant编译时遇到警告的编译不通过,

<javac nowarn=on ...>

㈩ 如何使用Ant脚本编译出Jar和Apk包

首先我们来看看如何使用ant脚本打出一个jar包 我们新建一个工程AntExportJar 在工程的目录下面新建一个build.xml,这个是ant脚本规定的一个入口脚本文件,文件名都是:build.xml [html] view plain ?
<?xml version ="1.0" encoding ="UTF-8" ?>
<project name ="AntExportJar" basedir ="." default ="exportJar" >
????<!--?设置全局变量?-->
????<property name ="src" value ="src" />
????<property name ="dist" value ="dist" />
????<property name ="app.name" value ="ant" />
????<property name ="app.version" value ="1.0" />
????<property name ="classes.encode" value ="GBK" />
????<property name ="lib" value ="libs" />

????<property
????????name ="project-dir"
????????value ="C:\Users\i\workspace\AntExportJar" />
????<property
????????name ="sdk-folder"
????????value ="C:\Users\i\AppData\Local\Android\sdk" />
????<property
????????name ="platform-folder"
????????value ="${sdk-folder}\platforms\android-22" />
????<property
????????name ="android-jar"
????????value ="${platform-folder}\android.jar" />
????<property
????????name ="src"
????????value ="${project-dir}\src" />
????<property
????????name ="bin"
????????value ="${project-dir}\bin" />
????<property
????????name ="libs"
????????value ="${project-dir}\lib" />

????<!--?task?-->
????<target name ="init" >
????????<echo>
????????????Initialize...
????????</echo>
????????<delete dir ="${bin}" />
????????<mkdir dir ="${bin}" />
????</target>

????<target name ="buildFiles" depends ="init" >
????????<javac
????????????????bootclasspath ="${android-jar}"
????????????????compiler ="javac1.7"
????????????????target ="1.7"
????????????????destdir ="${bin}"
????????????????encoding ="GBK"
????????????????includeAntRuntime ="true"
????????????????listfiles ="true" >
????????????????<src path ="${project-dir}" />
????????????????<classpath>
?????????????????????<!--?引用第三方jar包需要引用,用于辅助编译,并没有将jar打包进去。jar的打包在dex命令中。-->
?????????????????????<fileset dir ="${libs}" includes ="*.jar" />
????????????????</classpath>
????????</javac>
????</target>

????<!--?导出jar文件?-->
????<target name ="exportJar" depends ="buildFiles" >
????????<delete dir ="${dist}" />
????????<!--?Create?the?distribution?directory?-->
????????<mkdir dir ="${dist}" />
????????<!--?Put?everything?in?${classes}?into?the?MyProject-${DSTAMP}.jar?file?-->
????????<jar jarfile ="${dist}/${app.name}.jar" basedir ="${bin}" >
????????????<!--
????????????<fileset?dir="${libs}"?includes="**/*.jar"?/>
????????????-->
????????????<zipfileset excludes ="META-INF/*.SF" src ="${libs}/Bai_NativeAd_SDK.jar" />
????????????<zipfileset excludes ="META-INF/*.SF" src ="${libs}/gdt_mob_release.jar" />
????????</jar>
????</target>
</project>
脚本很简单,下面我们就来分析一下: [html] view plain ?
<project name ="AntExportJar" basedir ="." default ="exportJar" >
最外围的一个标签是project,是一个工程标签,有名字,还有就是工程的目录baseDir,用点号:"." 接下来就是定义全局变量,或者是属性值: [html] view plain ?
<!--?设置全局变量?-->
<property name ="src" value ="src" />
<property name ="dist" value ="dist" />
<property name ="app.name" value ="ant" />
<property name ="app.version" value ="1.0" />
<property name ="classes.encode" value ="GBK" />
<property name ="lib" value ="libs" />

<property
????name ="project-dir"
????value ="C:\Users\i\workspace\AntExportJar" />
<property
????name ="sdk-folder"
????value ="C:\Users\i\AppData\Local\Android\sdk" />
<property
????name ="platform-folder"
????value ="${sdk-folder}\platforms\android-22" />
<property
????name ="android-jar"
????value ="${platform-folder}\android.jar" />
<property
????name ="src"
????value ="${project-dir}\src" />
<property
????name ="bin"
????value ="${project-dir}\bin" />
<property
????name ="libs"
????value ="${project-dir}\lib" />
这样我们在后面就可以使用:${name值} 来使用value值的定义了,所以这里就相当于定义了变量的作用,这里我们看到有一些value值是路径,但是这里我们感觉有一个不好的地方,就是这些路径是写死的,那么我们还可以怎么做能让他变得灵活呢?其实很简单,ant脚本中是可以访问环境变量的,那么我们只要将这些路径定义成环境变量就可以了: [html] view plain ?
<property environment ="env" />
<property name ="ANDROID_HOME" value ="${env.ANDROID_HOME}" />
第一行先申明一个环境变量值,这个env是公共的写法,也是ant自带的,他表示当前的环境变量的值,那么后面就可以访问具体的哪些环境变量了,比如这里我配置了ANDROID_HOME这个环境变量,那么就可以用${env.ANDROID_HOME}来访问androidsdk的目录了,和上面的那个直接使用绝对路径的方式是一样的。 解析来就是定义task了,在ant中task也是最重要的,我们最终运行的都是task,就相当于Java中的main方法一样。ant脚本中可以定义多个task,而且每个task可以有执行的先后顺序的。相当于Java中的方法中调用其他方法一样。 [html] view plain ?
<!--?task?-->
<target name ="init" >
????<echo>
????????Initialize...
????</echo>
????<delete dir ="${bin}" />
????<mkdir dir ="${bin}" />
</target>
首先这里定义了一个初始化的task,其中echo标签也是很常用的,就是打印信息的,然后是删除目录${bin},这个bin变量在上面已经定义了,然后在创建${bin}目录。 初始化完之后,开始执行编译工作: [html] view plain ?
<target name ="buildFiles" depends ="init" >
????<javac
????????bootclasspath ="${android-jar}"
????????compiler ="javac1.7"
????????target ="1.7"
????????destdir ="${bin}"
????????encoding ="GBK"
????????includeAntRuntime ="true"
????????listfiles ="true" >
????????<src path ="${project-dir}" />
????????????<classpath>
????????????????<!--?引用第三方jar包需要引用,用于辅助编译,并没有将jar打包进去。jar的打包在dex命令中。-->
????????????????<fileset dir ="${libs}" includes ="*.jar" />
????????????</classpath>
????</javac>
</target>
这里在此定义一个buildFiles的task,depends的值是表示当前的task在这个depends的task执行完之后在执行,这里就是先执行init的task,然后在执行buildFiles的task,这里的task主要是编译Java成class文件: bootclasspath:表示编译依赖的系统库,这里依赖的是android.jar compiler:表示编译的java版本 target:表示编译之后的class的版本,就是能够运行的java版本 destDir:表示编译之后的class文件的存放目录 其他的就不说了,这里还有一个重点,也就是我们在编译的时候会遇到的问题,就是我们在编译的时候,会引用到第三发的jar,所以这里我们为了保证能够编译过,这里还必须用classpath标签来引用这些jar,当然这里只是能够保证编译通过,并不会把这些jar也编译到最终我们想要的jar中,这个问题我们后面再说。 下面在看最后的一个task,就是将编译完之后的class文件打包成jar文件: [html] view plain ?
<!--?导出jar文件?-->
<target name ="exportJar" depends ="buildFiles" >
????<delete dir ="${dist}" />
????<!--?Create?the?distribution?directory?-->
????<mkdir dir ="${dist}" />
????<!--?Put?everything?in?${classes}?into?the?MyProject-${DSTAMP}.jar?file?-->
????<jar jarfile ="${dist}/${app.name}.jar" basedir ="${bin}" >
????????<!--
????????<fileset?dir="${libs}"?includes="**/*.jar"?/>
????????-->
????<zipfileset excludes ="META-INF/*.SF" src ="${libs}/Bai_NativeAd_SDK.jar" />
????<zipfileset excludes ="META-INF/*.SF" src ="${libs}/gdt_mob_release.jar" />
????</jar>
</target>
这里我们定义了一个exportJar的task,他是在buildFiles的task运行完之后在运行。 首先删除目标目录${dist},然后在创建一个目录。这个目录就是存放最后编译好的jar文件的目录 然后就是用jar标签来导出jar文件了: jarfile:表示编译完之后存放的jar文件名路径 basedir:表示需要编译jar的class文件目录 其他就OK了,但是在实际中我们在编译的过程中会引用到第三方的jar,那么这时候我们把这些jar编译到最终的jar中,说道这里,其实我们在使用Eclipse导出jar的时候,有一个插件可以做到这点:fat-jar,安装完插件

热点内容
ubuntupython3安装 发布:2025-02-14 00:14:45 浏览:661
和平精英怎么更新比较快安卓 发布:2025-02-14 00:14:35 浏览:974
怎么改密码锁 发布:2025-02-13 23:47:39 浏览:852
androidbitmap获取大小 发布:2025-02-13 23:47:38 浏览:559
怎么把升级鸿蒙系统变回安卓 发布:2025-02-13 23:36:07 浏览:595
偶校验c语言 发布:2025-02-13 23:22:52 浏览:937
芒果如何提取离线缓存视频 发布:2025-02-13 23:16:12 浏览:793
王者荣耀微信区安卓哪里分低 发布:2025-02-13 23:14:10 浏览:658
安装linuxvmwaretools 发布:2025-02-13 22:56:02 浏览:8
浪潮服务器如何引导系统安装光盘 发布:2025-02-13 22:56:02 浏览:112