- 浏览: 90449 次
- 性别:
- 来自: 烟台
最新评论
-
daxiaoli123:
1 http://sourceforge.net/projec ...
GCJ让Java程序脱离jre执行 -
zhangtongysu:
楼主 ,那个下载 怎么回事啊。
利用Ant和Eclipse有效地提高部署工作效率
说他无所不能,好像有点夸张,但是用过Ant之后,感觉真的是只有想不到没有作不到.Ant,原作者选择他作为软件名字的意思是指"令一个简洁的工具"(Another Neat Tool),而这个真正的名字现在去很少为人所知,但这丝毫不影响他成为最优秀的构建工具.
现在开始我将进入一个"蚂蚁"的世界,通过例子,真真正正去了解他!
文章参考资料可以到http://www.manning.com/antbook去下载
Ant的最好学习资料<<使用Ant进行Java开发>>
Ant的官方网站: http://ant.apache.org/
Ant的最新版本:Ant 1.6.5
本文所有的例子运行的环境:JDK1.4.2,Ant1.6.2,eclipse3.0
一.使用Ant运行Java程序
我们先从简单的Hello学起,目录结构如下
project--
|src--
| |--org.ant.chapter1.Hello
|bin
|build.xml
以后的例子大多采用此目录结构,特例会额外声明
build.xml文件
<?xml version="1.0"?><project name="project" default="run"> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="run" depends="compile"> <java classname="org.ant.chapter1.Hello"> </java> </target></project>
从结构来看构建文件很简单,里面的内容大家也一定能够看得懂,可以看出Ant的核心任务就是target,一个Ant文件有多个target组成,而这些target之间,又有相互的依赖关系--depends,运行的时候默认运行project中指定的target.
javac--编译java文件 java--运行java文件
使用eclipse中集成的Ant运行build.xml文件(当然,也可以将ANT_HOME加到Path中,在命令行中运行)
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:run: [java] Working directory ignored when same JVM is used. [java] Could not find org.ant.chapter1.Hello. Make sure you have it in your classpath [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:166) [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:705) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:177) [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:83) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [java] at org.apache.tools.ant.Task.perform(Task.java:364) [java] at org.apache.tools.ant.Target.execute(Target.java:341) [java] at org.apache.tools.ant.Target.performTasks(Target.java:369) [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1214) [java] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:379) [java] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:135)BUILD SUCCESSFULTotal time: 703 milliseconds
,java入门的经典错误,ClassNotDefException,可见是classpath设置问题,而观察得到compile成功运行,所以我们在run-target里面加入classpath的配置
<?xml version="1.0"?><project name="project" default="run"> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="run" depends="compile"> <java classname="org.ant.chapter1.Hello"> <classpath path="bin"></classpath> </java> </target></project>
运行
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:run: [java] Hello World!BUILD SUCCESSFULTotal time: 672 milliseconds
成功!!第一个Ant应用完成,有人会说:用IDE运行岂不是更简单,但是你要知道运行java程序只是Ant的一个小小的功能,后面我们会看到Ant的更强大的功能!
下一篇文章将介绍java程序运行的扩展及用Ant运行tomcat!
java程序运行的扩展
1.带有参数的应用程序运行
Ant在<java>任务中提供了<arg>元素,<arg>有四种属性value,file,line,path
public class Hello {
public static void main(String[] args) { System.out.println("Hello " + args[0]); File file = new File(args[1]); String[] filename = file.list(); for(int i = 0; i < filename.length; i++) { System.out.println(filename); } }}
build.xml
<?xml version="1.0"?><project name="project" default="run"> <property name="run.classpath" value="bin"></property> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="run" depends="compile"> <java classname="org.ant.chapter1.Hello"> <classpath path="${run.classpath}"></classpath> <arg value="Ant"/> <arg file="D:\rag"/> </java> </target></project>
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:run: [java] Hello Ant [java] hello.datBUILD SUCCESSFULTotal time: 734 milliseconds
2.控制新的JVM
一般的<java>任务都运行在当前的JVM中,单一些特定的情况下将Ant运行在新的JVM下面,这时只需要将<java>中的一个属性fork设置为true就可以了.
我们知道,java命令提供了许多的运行参数,用于指定JVM的属性,同样在Ant也提供相应的属性,看例子:
<?xml version="1.0"?><project name="project" default="run"> <property name="run.classpath" value="bin"></property> <property name="Search.JVM.extra.args" value="-Xincgc"></property> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="run" depends="compile"> <java classname="org.ant.chapter1.Hello" fork="true" maxmemory="64m"> <classpath path="${run.classpath}"></classpath> <jvmarg line="${Search.JVM.extra.args}"/> <arg value="Ant"/> <arg file="D:\rag"/> </java> </target></project>
3.运行jar文件,使用failonerror处理错误
<java>同样提供了运行jar文件的属性
MANIFEST.MF
Mainfest-Version: 1.0Created-By: mythSealed: falseMain-Class: org.ant.chapter1.Hello
build.xml
<?xml version="1.0"?><project name="project" default="run"> <property name="run.classpath" value="bin"></property> <property name="Search.JVM.extra.args" value="-Xincgc"></property> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="jar" depends="compile"> <jar destfile="test.jar" update="true" manifest="MANIFEST.MF"> <fileset dir="bin"> <include name="**/*.class"/> </fileset> </jar> </target> <target name="run" depends="jar"> <java fork="true" maxmemory="64m" jar="test.jar"> <classpath path="${run.classpath}"></classpath> <jvmarg line="${Search.JVM.extra.args}"/> <arg value="Ant"/> <arg file="D:\rag"/> </java> </target></project>
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:jar: [jar] Updating jar: D:\MyEclipse\workspace\sad\test.jarrun: [java] Hello Ant [java] hello.datBUILD SUCCESSFULTotal time: 875 milliseconds
在某些情况下,我们不希望由于一些不重要的任务构建失败,而导致整个构建的失败,所以Ant提供了一个共同的属性-failonerror,多数任务的默认值为failonerror="true",既当此任务构建失败时,失败信息会传递给控制台,并导致build failed,failonerror只支持在新的JVM里运行.
<target name="run" depends="jar"> <java fork="true" maxmemory="64m" jar="test.jar" failonerror="false" > <classpath path="${run.classpath}"></classpath> <jvmarg line="${Search.JVM.extra.args}"/> <arg value="Ant"/> <arg file="D:\rag"/> </java> </target>
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:jar:run: [java] java.lang.NullPointerException [java] at org.ant.chapter1.Hello.main(Hello.java:27) [java] Hello Ant [java] Exception in thread "main" [java] Java Result: 1BUILD SUCCESSFULTotal time: 984 milliseconds
可以看出虽然run构建失败,但是Ant还是执行了,原来的jar文件,并且BUILD SUCCESSFUL!!
使用Ant运行tomcat
Ant使用<exec>任务运行本地程序,先看一个例子:
<?xml version="1.0"?><project name="project" default="run"> <target name="run"> <exec executable="cmd"> <arg value="/C a.bat"/> </exec> </target></project>
a.bat
@echo offecho Hello >> a.txt
运行完后,会在根目录生成a.txt文件,里面内容为Hello
下面我们来运行tomcat
<?xml version="1.0"?><project name="project" default="tomcat-start"> <property name="tomcat.dir" value="c:/Tomcat5"></property> <target name="tomcat-start"> <exec dir="${tomcat.dir}/bin" executable="cmd"> <env key="CATALINA_HOME" path="${tomcat.dir}"/> <arg value="/C startup.bat"/> </exec> </target>
<target name="tomcat-stop"> <exec dir="${tomcat.dir}/bin" executable="cmd"> <env key="CATALINA_HOME" path="${tomcat.dir}"/> <arg value="/c shutdown.bat"/> </exec> </target></project>
现在开始我将进入一个"蚂蚁"的世界,通过例子,真真正正去了解他!
文章参考资料可以到http://www.manning.com/antbook去下载
Ant的最好学习资料<<使用Ant进行Java开发>>
Ant的官方网站: http://ant.apache.org/
Ant的最新版本:Ant 1.6.5
本文所有的例子运行的环境:JDK1.4.2,Ant1.6.2,eclipse3.0
一.使用Ant运行Java程序
我们先从简单的Hello学起,目录结构如下
project--
|src--
| |--org.ant.chapter1.Hello
|bin
|build.xml
以后的例子大多采用此目录结构,特例会额外声明
build.xml文件
<?xml version="1.0"?><project name="project" default="run"> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="run" depends="compile"> <java classname="org.ant.chapter1.Hello"> </java> </target></project>
从结构来看构建文件很简单,里面的内容大家也一定能够看得懂,可以看出Ant的核心任务就是target,一个Ant文件有多个target组成,而这些target之间,又有相互的依赖关系--depends,运行的时候默认运行project中指定的target.
javac--编译java文件 java--运行java文件
使用eclipse中集成的Ant运行build.xml文件(当然,也可以将ANT_HOME加到Path中,在命令行中运行)
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:run: [java] Working directory ignored when same JVM is used. [java] Could not find org.ant.chapter1.Hello. Make sure you have it in your classpath [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:166) [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:705) [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:177) [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:83) [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [java] at org.apache.tools.ant.Task.perform(Task.java:364) [java] at org.apache.tools.ant.Target.execute(Target.java:341) [java] at org.apache.tools.ant.Target.performTasks(Target.java:369) [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1214) [java] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:379) [java] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:135)BUILD SUCCESSFULTotal time: 703 milliseconds
,java入门的经典错误,ClassNotDefException,可见是classpath设置问题,而观察得到compile成功运行,所以我们在run-target里面加入classpath的配置
<?xml version="1.0"?><project name="project" default="run"> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="run" depends="compile"> <java classname="org.ant.chapter1.Hello"> <classpath path="bin"></classpath> </java> </target></project>
运行
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:run: [java] Hello World!BUILD SUCCESSFULTotal time: 672 milliseconds
成功!!第一个Ant应用完成,有人会说:用IDE运行岂不是更简单,但是你要知道运行java程序只是Ant的一个小小的功能,后面我们会看到Ant的更强大的功能!
下一篇文章将介绍java程序运行的扩展及用Ant运行tomcat!
java程序运行的扩展
1.带有参数的应用程序运行
Ant在<java>任务中提供了<arg>元素,<arg>有四种属性value,file,line,path
public class Hello {
public static void main(String[] args) { System.out.println("Hello " + args[0]); File file = new File(args[1]); String[] filename = file.list(); for(int i = 0; i < filename.length; i++) { System.out.println(filename); } }}
build.xml
<?xml version="1.0"?><project name="project" default="run"> <property name="run.classpath" value="bin"></property> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="run" depends="compile"> <java classname="org.ant.chapter1.Hello"> <classpath path="${run.classpath}"></classpath> <arg value="Ant"/> <arg file="D:\rag"/> </java> </target></project>
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:run: [java] Hello Ant [java] hello.datBUILD SUCCESSFULTotal time: 734 milliseconds
2.控制新的JVM
一般的<java>任务都运行在当前的JVM中,单一些特定的情况下将Ant运行在新的JVM下面,这时只需要将<java>中的一个属性fork设置为true就可以了.
我们知道,java命令提供了许多的运行参数,用于指定JVM的属性,同样在Ant也提供相应的属性,看例子:
<?xml version="1.0"?><project name="project" default="run"> <property name="run.classpath" value="bin"></property> <property name="Search.JVM.extra.args" value="-Xincgc"></property> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="run" depends="compile"> <java classname="org.ant.chapter1.Hello" fork="true" maxmemory="64m"> <classpath path="${run.classpath}"></classpath> <jvmarg line="${Search.JVM.extra.args}"/> <arg value="Ant"/> <arg file="D:\rag"/> </java> </target></project>
3.运行jar文件,使用failonerror处理错误
<java>同样提供了运行jar文件的属性
MANIFEST.MF
Mainfest-Version: 1.0Created-By: mythSealed: falseMain-Class: org.ant.chapter1.Hello
build.xml
<?xml version="1.0"?><project name="project" default="run"> <property name="run.classpath" value="bin"></property> <property name="Search.JVM.extra.args" value="-Xincgc"></property> <target name="compile"> <javac destdir="bin" srcdir="src"></javac> </target> <target name="jar" depends="compile"> <jar destfile="test.jar" update="true" manifest="MANIFEST.MF"> <fileset dir="bin"> <include name="**/*.class"/> </fileset> </jar> </target> <target name="run" depends="jar"> <java fork="true" maxmemory="64m" jar="test.jar"> <classpath path="${run.classpath}"></classpath> <jvmarg line="${Search.JVM.extra.args}"/> <arg value="Ant"/> <arg file="D:\rag"/> </java> </target></project>
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:jar: [jar] Updating jar: D:\MyEclipse\workspace\sad\test.jarrun: [java] Hello Ant [java] hello.datBUILD SUCCESSFULTotal time: 875 milliseconds
在某些情况下,我们不希望由于一些不重要的任务构建失败,而导致整个构建的失败,所以Ant提供了一个共同的属性-failonerror,多数任务的默认值为failonerror="true",既当此任务构建失败时,失败信息会传递给控制台,并导致build failed,failonerror只支持在新的JVM里运行.
<target name="run" depends="jar"> <java fork="true" maxmemory="64m" jar="test.jar" failonerror="false" > <classpath path="${run.classpath}"></classpath> <jvmarg line="${Search.JVM.extra.args}"/> <arg value="Ant"/> <arg file="D:\rag"/> </java> </target>
Buildfile: D:\MyEclipse\workspace\sad\build.xmlcompile:jar:run: [java] java.lang.NullPointerException [java] at org.ant.chapter1.Hello.main(Hello.java:27) [java] Hello Ant [java] Exception in thread "main" [java] Java Result: 1BUILD SUCCESSFULTotal time: 984 milliseconds
可以看出虽然run构建失败,但是Ant还是执行了,原来的jar文件,并且BUILD SUCCESSFUL!!
使用Ant运行tomcat
Ant使用<exec>任务运行本地程序,先看一个例子:
<?xml version="1.0"?><project name="project" default="run"> <target name="run"> <exec executable="cmd"> <arg value="/C a.bat"/> </exec> </target></project>
a.bat
@echo offecho Hello >> a.txt
运行完后,会在根目录生成a.txt文件,里面内容为Hello
下面我们来运行tomcat
<?xml version="1.0"?><project name="project" default="tomcat-start"> <property name="tomcat.dir" value="c:/Tomcat5"></property> <target name="tomcat-start"> <exec dir="${tomcat.dir}/bin" executable="cmd"> <env key="CATALINA_HOME" path="${tomcat.dir}"/> <arg value="/C startup.bat"/> </exec> </target>
<target name="tomcat-stop"> <exec dir="${tomcat.dir}/bin" executable="cmd"> <env key="CATALINA_HOME" path="${tomcat.dir}"/> <arg value="/c shutdown.bat"/> </exec> </target></project>
发表评论
-
调试MAVEN项目appfuse-light-struts2-spring-jdbc-1.8的问题
2008-03-07 16:31 2285出现问题: Project appfuse-light-str ... -
MVC设计思想
2008-03-01 22:13 2144MVC英文即Model-View-Controll ... -
当前Java软件开发中几种认识误区(转)
2008-03-01 22:11 970软件的生命性 软件是有生命的,这可能是老调重弹了,但是因 ... -
给servlet写单元测试的总结(转)
2008-02-19 11:19 3545servlet的测试一般来说需要容器的支持,不是像通常的jav ... -
取得参数的几中形式
2008-02-18 12:54 882java -DSTOP.PORT=8080 -DSTOP.KE ... -
正则表达式
2008-02-18 12:34 900目录 本文目标 如何使 ... -
关于Java中类在构造对象时的初始化步骤详解
2008-02-18 12:17 2100很多人在学习Java的过程 ... -
Java连接各种数据库的实例
2008-02-18 12:13 1166一、jsp连接Oracle8/8i/9i数据库(用thin模式 ... -
为什么要使用接口编程(转)
2008-02-17 21:42 1285看了接口编程这篇文章, ... -
JAVA中浅复制与深复制
2008-02-17 21:38 7201.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变 ... -
短信网关发送部分源代码
2008-02-17 21:37 1216package com.etonenet.iiie.sdk; ... -
appfuse结合eclipse开发流程
2008-02-17 21:33 1220Appfuse应用的核心在于ant ... -
使用Antlr和JfreeChart实现项目源代码行数计算图表
2008-02-17 21:30 1541Antlr的功能在我的其他文章里提到了就不多说了,JFreeC ... -
使用ANT协助开发java项目
2008-02-17 21:29 896ANT是Apache的开源项目,目前在java的项目开发中被广 ... -
利用Ant和Eclipse有效地提高部署工作效率
2008-02-17 21:26 1265本文主要介绍 Ant 在多 ... -
使用开源软件 Mantis 实施缺陷跟踪的成功实践
2008-02-17 21:22 1699内容摘要 中国开源 注:当前Mantis稳定发布版本为1.0. ... -
开源缺陷跟踪系统mantis安装指南
2008-02-17 21:14 18881. 简介 mantis(螳螂)是一个基于php/MySQL/ ... -
Java华为面试题
2008-02-17 21:08 1470第一部分:选择题 QUESTION NO: 1 1、publi ... -
java中读取Properties文件
2008-02-17 21:06 907ResourceBundle resourceBundle = ... -
Java范型
2008-02-17 21:04 1537从jdk1.5开始,Java中开始 ...
相关推荐
MatlabGUI使用java组件无所不能-uicomponent.m 是不是曾经想做出漂亮的GUI 界面? 是不是曾经想在 Matlab GUI里面显示网页? 看看这个界面: matlab_java.png 所以,...
标题中的“你的习惯对了,你无所不能-习惯的力量PPT模板”暗示了这个PPT内容将探讨习惯如何塑造个人能力和成功。描述中提到“每天有40%的行为并不是真正由决定促成的,而是出于习惯”,这引用了一个研究发现,强调了...
### 苹果JBL无所不能遥控器操作说明详解 #### 一、产品介绍与安全须知 ##### 产品概述 苹果JBL“无所不能”遥控器是一款专为苹果设备设计的多功能遥控器,具备六个主要按钮,能够实现对音频播放器、电视等多种设备...
智慧能源-无所不能 完整
总的来说,"万能编程器软件---无所不能"不仅是一个工具,更是一种解决方案,它简化了对各种类型芯片编程的过程,提高了开发效率。无论是用于学习、原型设计还是大规模生产,这样的软件都是电子工程师的得力助手。其...
"让迅雷无所不能下载"这个标题暗示了一个可能的增强迅雷下载功能的补丁或者插件,使得用户能够下载更多类型或者原本限制下载的资源。 首先,迅雷的核心技术是P2SP(peer-to-server-peer),它结合了传统的P2P和P2S...
让迅雷无所不能下载、通吃一切 让迅雷无所不能下载、通吃一切
本文将详细介绍如何利用特定的工具或方法,使迅雷能够处理这些非传统迅雷链接的资源,实现“让迅雷无所不能”的目标。 首先,了解电驴(eMule)和快车(FlashGet)的下载机制。电驴是一种P2P(peer-to-peer)共享网络,...
能源互联网白皮书-to 无所不能.pptx
标题中的“电脑测试软件很好用无所不能”表明我们讨论的是一款功能强大的计算机系统诊断和测试工具,它能够全面地分析和评估电脑硬件和软件的性能。这类软件通常包含多个模块,用于测试处理器、内存、硬盘、显卡等...
根据提供的文件信息,以下是关于VB无所不能系列的详细知识点。 ### 1. 指针 指针在VB中的使用与C语言等其他编程语言中的使用有所不同,因为VB是一种高级语言,它对内存访问进行了封装。在VB中,可以通过API调用和...
标题中的“真正的无所不能!”可能是指这个压缩包包含了大量的IT学习资源,涵盖了多个领域的知识,而描述中的“我所下的所有书的整合!绝对经典!只要你能想到的这里面都有!”进一步证实了这一点,说明这个集合包含...
"能源互联网白皮书-to 无所不能.zip" 文件包含了对这一主题的深入探讨,尤其通过其包含的 "能源互联网白皮书-to 无所不能.pptx" 讲义,我们可以从多个方面了解能源互联网的核心理念和应用实践。 1. **定义与概念**...
谷歌发布5620亿参数多模态模型PaLM-E,机器人操控无所不能" 这个标题揭示了谷歌在人工智能领域的一项重大突破,即他们推出了一个具有5620亿参数的多模态模型,命名为PaLM-E。这里的“重磅”暗示了该发布的重要性,...
【智慧能源】是一种结合了互联网技术的新型能源管理体系,旨在通过智能化的方式优化能源生产、分配和消费,提高能源效率,减少环境污染,同时满足人们日益增长的多元化能源需求。这一概念的提出,源于对传统能源系统...
网络精选教程,希望大家不要忘记VB,包括GDI绘画等详解的例子
5. 数据技术:数据技术的价值在于它能够帮助人类处理更多的数据、加工更多的信息、总结更多的知识、创造更多的智慧,甚至能够做到让人类无所不知、无所不晓、无所不能。 6. 数字化转型的两个阶段:OLTP, OLAP 7. ...
无所不能 相当强大 目前最强大内容最丰富的超级模块
【智慧能源】是一种结合了互联网技术的新型能源管理系统,它超越了传统的能耗监测,实现了监测、考核、管理、控制的全面整合,形成了一个四位一体的精细化能源管理平台。该平台可以细化到对每个用户或者房间的能耗...