看板java
标 题[doc] ant常用task
发信站无名小站 (Sat Apr 8 13:59:09 2006)
转信站ptt!ctu-reader!Spring!news.nctu!news.ntu!news.ee.ttu!netnews.csie.nctu
主要内容
1. 常用task(这是很主观的xd)
:: mkdir
:: copy
:: delete
:: move
:: javac
:: echo
:: java
2. 执行class
3. target相依性
行前讲习
* 在一些稍具模规的project大致上都会把source directory
和output directory分开,output directory也许是lib也许是bin
没有一定的。要达到这些目的,在ant中提供了几个task能帮得上忙。
(copy. move. delete. mkdir)
* 一个project可能有多许`组`程式,你可以为这些程式分别撰写个自的target
但是,有些target必需限制在某些target之後执行。这问题就需要利用
target的相依属性(depends)来设定了:)
重新规划nice project
project basedir
/
src/
bin/
build.xml
我们重新规划project如上述目录结构:)所以,我们这回把*.java放在src
之中。产生出的*.class则放在bin之中。但我并不打算自己建立bin dir
build.xml (原先的)
----------------------------------------------------------------------
slayer@ubuntu:~/test/anttest$ ls
build.xml src
slayer@ubuntu:~/test/anttest$ cat build.xml
<?xml version="1.0" encoding="utf-8" ?>
<project name="nice" basedir=".">
<property name="src.dir" value="."/>
<target name="i-need-kitty"
description="just get me a hello kitty">
<echo>Kitty Kitty</echo>
<javac srcdir="${src.dir}" />
</target>
</project>
build.xml (指定src) :: 如之前介绍的,更改src.dir变数内容即可:)
----------------------------------------------------------------------
slayer@ubuntu:~/test/anttest$ cat build.xml
<?xml version="1.0" encoding="utf-8" ?>
<project name="nice" basedir=".">
<property name="src.dir" value="src"/>
<target name="i-need-kitty"
description="just get me a hello kitty">
<echo>Kitty Kitty</echo>
<javac srcdir="${src.dir}" />
</target>
</project>
slayer@ubuntu:~/test/anttest$ ant i-need-kitty
Buildfile: build.xml
i-need-kitty:
[echo] Kitty Kitty
BUILD SUCCESSFUL
Total time: 1 second
slayer@ubuntu:~/test/anttest$ ls -l src/
总计 8
-rw-r--r-- 1 slayer slayer 340 2006-04-08 13:02 HelloKitty.class
-rw-r--r-- 1 slayer slayer 108 2006-04-08 08:26 HelloKitty.java
slayer@ubuntu:~/test/anttest$
===================================================================
结果发现,编译好的class档跑到src内了。所以我们还需要再修改一下
build.xml来符合我们所期待的结果。为了达成我们的目的,有几种改变的方式
你可以在i-need-kitty的target中,直接使用mkdir等相关的task。
或是把建立bin directory独立为一个target。
build.xml :: 采用在i-need-kitty加上move的动作
http://ant.apache.org/manual/CoreTasks/move.html
----------------------------------------------------------------------
slayer@ubuntu:~/test/anttest$ cat build.xml
<?xml version="1.0" encoding="utf-8" ?>
<project name="nice" basedir=".">
<property name="src.dir" value="src"/>
<property name="bin.dir" value="bin"/>
<target name="i-need-kitty"
description="just get me a hello kitty">
<echo>Kitty Kitty</echo>
<javac srcdir="${src.dir}" />
<move todir="${bin.dir}">
<fileset dir="${src.dir}">
<include name="*.class" />
</fileset>
</move>
</target>
</project>
执行i-need-kitty
----------------------------------------------------------------------
slayer@ubuntu:~/test/anttest$ ant i-need-kitty
Buildfile: build.xml
i-need-kitty:
[echo] Kitty Kitty
[javac] Compiling 1 source file
[move] Moving 1 file to /home/slayer/test/anttest/bin
BUILD SUCCESSFUL
Total time: 2 seconds
观察结果,确实是我们期待的那样:)
----------------------------------------------------------------------
slayer@ubuntu:~/test/anttest$ ls -l *
-rw-r--r-- 1 slayer slayer 585 2006-04-08 13:18 build.xml
bin:
总计 4
-rw-r--r-- 1 slayer slayer 340 2006-04-08 13:19 HelloKitty.class
src:
总计 4
-rw-r--r-- 1 slayer slayer 108 2006-04-08 08:26 HelloKitty.java
======================================================================
细心的人一定发现了。我们并没有mkdir:) 这大概算move的特异功能xd
没有先mkdir出来。它就帮你自动mkdir了。
接着那编好了之後,能不能执行来跑看看呢? 这当然也是一个ez job
首先,先让我招唤一下error message:)
build.xml :: 含java HelloKitty
----------------------------------------------------------------------
slayer@ubuntu:~/test/anttest$ cat build.xml
<?xml version="1.0" encoding="utf-8" ?>
<project name="nice" basedir=".">
<property name="src.dir" value="src"/>
<property name="bin.dir" value="bin"/>
<target name="i-need-kitty"
description="just get me a hello kitty">
<echo>Kitty Kitty</echo>
<javac srcdir="${src.dir}" />
<move todir="${bin.dir}">
<fileset dir="${src.dir}">
<include name="*.class" />
</fileset>
</move>
</target>
<target name="kitty">
<java classname="HelloKitty" />
</target>
</project>
slayer@ubuntu:~/test/anttest$ ant kitty
Buildfile: build.xml
kitty:
[java] Could not find HelloKitty. Make sure you have it in your
classpath
[java] at
org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:170)
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:710)
[java] at
org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:178)
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:84)
[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.executeSortedTargets(Project.java:1216)
[java] at
org.apache.tools.ant.Project.executeTarget(Project.java:1185)
[java] at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
[java] at
org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[java] at org.apache.tools.ant.Main.runBuild(Main.java:668)
[java] at org.apache.tools.ant.Main.startAnt(Main.java:187)
[java] at
org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
[java] at
org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
BUILD SUCCESSFUL
Total time: 0 seconds
======================================================================
别害怕错误讯息太多。通常看第一个发生的错误就是了。如果不确定,
就找与你自己的程式有关的部分来看就好。其他package产生的错误只是连带而来:)
<%
Could not find HelloKitty.
Make sure you have it in your classpath
%>
所以,直觉就是没有为java属性加上classpath:
<%
<java classname="HelloKitty" classpath="${bin.dir}" />
%>
再次执行:
----------------------------------------------------------------------
slayer@ubuntu:~/test/anttest$ ant kitty
Buildfile: build.xml
kitty:
[java] Get Hello Kitty atSat Apr 08 13:45:39 CST 2006
BUILD SUCCESSFUL
Total time: 0 seconds
======================================================================
虽然,到目前为止看起来是正常的。但是我们忽略了执行顺序的问题。如果没有
先执行i-need-kitty就会发生问题。同样地,我们砍除bin来招唤出error message
来欣赏一下^^
<%
slayer@ubuntu:~/test/anttest$ rm -rf bin
slayer@ubuntu:~/test/anttest$ ant kitty
Buildfile: build.xml
kitty:
[java] Could not find HelloKitty. Make sure you have it in your
classpath
................................................後面同上:)
%>
你会发现这和没有写classpath的error message是相同的。
所以,当发生这种error message时,您必需检查这二种情况:)
言归正传,我们还是要用target提供的depends属性来做简单的处理:
<%
<target name="kitty" depends="i-need-kitty">
%>
再次执行
----------------------------------------------------------------------
slayer@ubuntu:~/test/anttest$ ant kitty
Buildfile: build.xml
i-need-kitty:
[echo] Kitty Kitty
[javac] Compiling 1 source file
[move] Moving 1 file to /home/slayer/test/anttest/bin
kitty:
[java] Get Hello Kitty at Sat Apr 08 13:53:17 CST 2006
BUILD SUCCESSFUL
Total time: 1 second
======================================================================
大致上,ant基本就是这些功能噜:)
看倌可以自行实作2个target
1. usage: 用echo显示讯息
2. clean: 用delete删除bin
PS. 本篇将相依、classpath的问题过於简化:)
有兴趣的朋友可以上网找相关文章 :)
--
夫兵者不祥之器物或恶之故有道者不处君子居则贵左用兵则贵右兵者不祥之器非君子
之器不得已而用之恬淡为上胜而不美而美之者是乐杀人夫乐杀人者则不可得志於天下
矣吉事尚左凶事尚右偏将军居左上将军居右言以丧礼处之杀人之众以哀悲泣之战胜以
丧礼处之道常无名朴虽小天下莫能臣侯王若能守之万物将自宾天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦将知止知止可以 pc210-59-94-148.nutn.edu.tw海
作者在
06/04/08 12:39:21 从
pc210-59-94-148.nutn.edu.tw 修改这篇文章
作者在
06/04/08 13:29:04 从
pc210-59-94-148.nutn.edu.tw 修改这篇文章
作者在
06/04/08 13:32:22 从
pc210-59-94-148.nutn.edu.tw 修改这篇文章
作者在
06/04/08 13:46:48 从
pc210-59-94-148.nutn.edu.tw 修改这篇文章
作者在
06/04/08 13:56:49 从
pc210-59-94-148.nutn.edu.tw 修改这篇文章
作者在
06/04/08 13:58:50 从
pc210-59-94-148.nutn.edu.tw 修改这篇文章
作者在
06/04/08 13:59:09 从
pc210-59-94-148.nutn.edu.tw 修改这篇文章