Antx新手入门
1.Antx希望解决的问题:
a). Build
b). Repository管理
c). 面向project而不是target(task)
2.Antx的安装:
a). 前提:安装JDK,并设置系统环境变量JAVA_HOME,指向JDK安装目录。
b). 获取antx:svn co svn.alibaba-inc/repos/opentech/antx/trunk antx,或者使用TortoiseSVN获取。
c). build antx:执行build.bat或build.sh,执行完之后,会生成dist/antx目录。
d). 设置环境变量:设置系统环境变量ANTX_HOME,指向生成的dist/antx目录,并将$A
NTX_HOME/bin目录加入到PATH环境变量中。
e). 获取第二方类库并设置其位置:svn co svn.alibaba-inc/repos/binary/repository.project repository.project, repository.project默认应该放在user.home/.antx目录下,如果你本地不是放在这个路径下,则修改user.home目录下antx.properties文件,设置pository.project属性值为本地的repository.project所在目录。如果你还同时希望修改其它repository的位置,也可以在此设置。(默认情况下pository.local位于user.home/.antx/repository目录下,al位于$ANTX_HOME/repository目录下或者$ANTX_HOME/../../repository目录下)
3. 单项目antx的使用:
a). 创建antx项目:antx gen(或者使用Antx eclipse plugin的项目创建向导功能,有关Antx eclipse plugin的使用,详见第8节),antx gen创建的目录结构如下:
myproject
│ project.jelly - 项目脚本文件
│ l - 项目描述文件
│
├─docs - 文档目录
│
└─src - 源代码目录
└─java - Java源代码目录
b). 修改生成的l,修改其项目id,添加需要的依赖库和其它构建属性,示例如下:
<project id="my/project">
<build>
<property name=”javapiler.source” value=”1.5”/>
<property name=”javapiler.target” value=”1.5”/>
<dependencies>
<include uri="jakarta/commons/lang"/>
</dependencies>
</build>
</project>
c). 编写代码(位于src/java目录下)
d). 在项目目录下执行antx jar或者antx,输出类似如下:
java:compile:
[mkdir] Created dir: C:\myproject\target\classes
[javac] Compiling 1 source file to C:\myproject\target\classes
jar:jar:
[jar] Building jar: C:\myproject\target\my-project.jar
说明:antx jar和antx执行效果相同,是因为使用antx gen默认产生的project.jelly文件中指定了项目的默认目标为jar。
4.多项目antx的使用:
对于关系紧密的多个项目,一般会建立ProjectGroup,ProjectGroup目录结构一般会类似如下:
Hello
│ project.jelly - 总控项目脚本文件
│ l - 总控项目描述文件
│
├─biz - biz层
└─dal - dal项目
└─user - user项目
│
└─bundle - bundle层
└─ear - ear项目
└─war - war项目
└─ejb - ejb项目
│
└─web - web层
└─user - user项目
└─home - home项目
└─deploy - deploy项目
首先总控项目文件会定义所有子项目都会使用的一些属性,例如build property以及projects定义,示例如下:
<build>
<!—指定reactor时的project group名称-->
<property name="up" value="hello7"/>
<!—指定ejb的目标服务器-->
<property name="ejb.target.server" value="jboss"/>
</build>
<!—这是reactor group指定的项目组,一般需要指定每个子项目的相对路径-->
<projects name="hello7" version="1.0">
<project id="hello7/all" dir="."/>
<project id="hello7/bundle/ejb" dir="bundle/ejb"/>
<project id="hello7/bundle/war" dir="bundle/war"/>
<project id="hello7/deploy" dir="deploy"/>
<project id="hello7/web/home" dir="web/home"/>
<project id="hello7/bundle/ear" dir="bundle/ear"/>
<project id="hello7/web/user" dir="web/user"/>
</projects>
<!—统一指定了子项目所用到的lib的版本-->
<projects name="toolkit-common" version="1.0">
<project id="toolkit/common/lang"/>
<project id="toolkit/common/collection"/>
<project id="toolkit/common/logging"/>
<project id="toolkit/common/resourcebundle"/>
<project id="toolkit/common/configuration"/>
<project id="toolkit/common/expression"/>
<project id="toolkit/common/enum"/>
<project id="toolkit/common/convert"/>
<project id="toolkit/common/property"/>
<project id="toolkit/common/resource"/>
<project id="toolkit/common/regexp"/>
<project id="toolkit/common/mail"/>
<project id="toolkit/common/j2ee"/>
</projects>
对于所有的子项目而言,需要指定其extend自这个总控项目(指定相对路径,并且多个../可以压缩为一个../)。
对于ProjectGroup,可以通过antx reactor来对于ProjectGroup中的每个子项目执行相应目标,并且antx reactor保证按照项目之间的依赖关系顺序构建。
5.repository :
为解决不同类型的项目之间的关联关系不同,构建方式也不同的问题,antx实现了三级repository。
第一级(local, 所谓的1st party类库)
a)位置:$HOME\.antx\repository
b)用于关联关系较紧密的子项目
例如:同一个team在同一时间开发的若干子项目
c)该repository的内容只存在于本地,不需要被共享
第二级(project, 所谓的2nd party类库)
d)位置(默认):$HOME\.antx\repository.project
e)用于关联关系较疏远的子项目
例如:不同team或不同时期开发的子项目
f)该repository的内容需要被team间共享
java系统变量设置g)该repository的内容通常需要注明版本号
第三级(external, 所谓的3rd party类库)
h)位置:antx\repository或者antx\..\..\repository
i)用于定义第三方提供的类库
例如:Apache Jakarta类库
j)该repository随着antx更新而更新
k)该repository中的内容可以被注明版本号,也可以不注
6.常用antx命令:
antx : 执行当前项目的默认目标,默认目标即为project.jelly中的default属性值。
antx reactor : 对于Project Group中的每一个项目执行默认目标。ProjectGroup中的项目是怎样确定的呢:如果命令行上通过projects属性指定,则以这些projects为准;否则以总控项目文件中up属性对应的projects组中所包含的project为准;如果up没有指定,或者指定错误,则扫描当前目录下的所有子项目。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论