基于Ivy ant的java构建初探
Upcoming SlideShare
Loading in...5
×
 

基于Ivy ant的java构建初探

on

  • 1,401 views

apache ivy

apache ivy

Statistics

Views

Total Views
1,401
Views on SlideShare
1,351
Embed Views
50

Actions

Likes
0
Downloads
9
Comments
0

1 Embed 50

http://yeungeek.tk 50

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

基于Ivy ant的java构建初探 基于Ivy ant的java构建初探 Presentation Transcript

  • 基于Ivy/Ant的Java构建初探 统一系统部 杨剑2012-6-20 杭州斯凯网络科技有限公司 1
  • 选择Ivy的N个理由 使用Ivy 系统构建步骤 系统构建规范 Ivy Resources2012-6-20 杭州斯凯网络科技有限公司 2
  • Java构建的进化过程 直接在lib中添加jar包 初期 1. 直接使用IDE导出 2. 使用Ant来构建 定义userlibraries,包含jar包声明 过渡 1. 使用Ant构建 使用Ivy、Maven统一管理依赖 现在 1. 使用Ant+Ivy构建 2. 使用Maven构建 。。。。。。 未来2012-6-20 杭州斯凯网络科技有限公司 3
  • Apache IvyApache Ivy™ is a popular dependency managerfocusing on flexibility and simplicity.Apache Ivy 是Apache Ant 下的一个子项目。是一个优秀的管理(记彔、跟踪、解析和报告)项目依赖的工具,提供了强大的依赖管理功能,可与Apache Ant紧密集成。2012-6-20 杭州斯凯网络科技有限公司 4
  • 功能 能够和Apache Ant紧密集成 支持多个不同的依赖存储 依赖报告Dependency Reporting 支持持续集成 强大的冲突管理功能 reference:http://ant.apache.org/ivy/features.html2012-6-20 杭州斯凯网络科技有限公司 5
  • Ant+Ivy VS Maven Maven Ant+Ivy 概念 项目管理工具 项目构建工具 +依赖管理工具 标准构建文件 project.xml、maven.xml build.xml 标准依赖文件 pom.xml ivy.xml 学习成本 需要重新学习 目前项目中大多使用Ant 曲线比较大 构建,只需要接入Ivy2012-6-20 杭州斯凯网络科技有限公司 6
  • 谁在用 Spring Framework2012-6-20 杭州斯凯网络科技有限公司 7
  • 选择Ivy的N个理由 使用Ivy 系统构建步骤 系统构建规范 Ivy Resources2012-6-20 杭州斯凯网络科技有限公司 8
  • 环境安装 安装 ANT 配置环境变量:  ANT_HOME::D:Javadevapache-ant  PATH:%ANT_HOME%bin,(为了方便在命令行下操作) 下载Ivy 将下载的ivy安装包解压,然后复制ivy的jar文件到ant的lib目彔下(ANT_HOME/lib)。 转到ivy解压的src/example/hello-ivy目彔并运行ant,检验环境是否配置成功。2012-6-20 杭州斯凯网络科技有限公司 9
  • IDE集成 Eclipse Apache IvyDE Intellij IDEA IvyIDEA Ivy Plugin目前Eclipse的支持较好,其他IDE的支持正在改善中2012-6-20 杭州斯凯网络科技有限公司 10
  • 术语 术语 描述Organisation 组织名Module 模块Module Descriptor 模块描述符Artifact 制品Type of an artifact 制品类型Artifact file name extension 制品文件扩展名Module Revision 模块修订版本Branch 分支Status of a revision 修订本状态Configurations of a module 模块配置Ivy Settings ivy设置Repository 仓库2012-6-20 杭州斯凯网络科技有限公司 11
  • 2012-6-20 杭州斯凯网络科技有限公司 12
  • 如何工作2012-6-20 杭州斯凯网络科技有限公司 13
  • 选择Ivy的N个理由 使用Ivy 系统构建步骤 系统构建规范 Ivy Resources2012-6-20 杭州斯凯网络科技有限公司 14
  • IvyDE设置 设置Ivy SettingsIvy settings path:http://stcdev.sky-mobi.com:8080/devconf/ivysettings.xml2012-6-20 杭州斯凯网络科技有限公司 15
  • build.xml <?xml version="1.0" encoding="UTF-8" ?> <!--ant 脚本文件 --> <project name="rop-mis" basedir="."> <!--设置下面要用到的属性--> <property name="module.name" value="${ant.project.name}" /> <property name="module.version" value="1.0.0" /> <property name="devconf.url" value="http://stcdev.sky-mobi.com:8080/devconf" /> <property name="app.buildfile" value="build-app.xml" /> <!-- import file="../allconf/${app.buildfile}" as=“impl"/ --> <import as="impl"> <url url="${devconf.url}/${app.buildfile}"/> </import> </project> 其中import标签,需要ant添加组件jar,可以到 https://svn2.sky-mobi.com:9991/svn/netdevpublic/TOOLS 下载已经集成的Ant2012-6-20 杭州斯凯网络科技有限公司 16
  • ivy.xml <?xml version="1.0" encoding="UTF-8"?> <ivy-module version="2.0“ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> <info organisation="skymobi.app" module="${module.name}" revision="1.0.0" status="release" publication="20101124120000"> <description homepage="http://stcdev.sky- mobi.com/redmine/projects/${module.name}"> Skymobi app:${module.name} </description> </info> <configurations> <conf name="compile" visibility="public"/> <conf name="test" visibility="private" extends="compile" /> <conf name="runtime" visibility="public" extends="compile" /> <conf name="develop" visibility="public" extends="compile" /> </configurations>2012-6-20 杭州斯凯网络科技有限公司 17
  • ivy.xml <publications> <artifact name="rop-mis" type="jar" ext="jar" conf="compile"/> <artifact name="rop-mis" type="source" ext="jar" conf="develop"/> <artifact name="rop-mis" type="javadoc" ext="jar" conf="develop"/> <artifact name="rop-mis" type="distribution" ext="zip" conf="runtime"/> </publications> <dependencies> <dependency org="skymobi.stc" name="stc-util" rev="latest.release" conf="compile"/> <dependency org="skymobi.stc" name="stc-bean" rev="latest.release" conf="compile"/> <dependency org="com.oracle" name="oracle-jdbc-classes12" rev="10.2.0.1.0" conf="runtime->default(*)"/> <dependency org="junit" name="junit" rev="4.8.2" conf="test->default(*)"/> <dependency org="skymobi.stc" name="stc-unit-repo" rev="snapshot" conf="compile" transitive="false" changing="true"/> <dependencies> </ivy-module>2012-6-20 杭州斯凯网络科技有限公司 18
  • ivy.xml 属性 描述 基数info 包含被描述的模块的信息 1configurations 配置元素的容器 0..1publications 发布制品元素的容器 0..1dependencies 依赖元素的容器 0..1其中需要改变的是dependencies中的dependency标签,对依赖文件进行管理 属性 描述 是否必须org 依赖的organisation名称 否,默认与模块organisation相同name 依赖的module名称 是rev 依赖的版本号 是conf 内联映射配置 否transitive true时,递归解析依赖 否,默认为truechanging true时,依赖不受版本控制 否,默认false2012-6-20 杭州斯凯网络科技有限公司 19
  • 添加到classpath 1. 右键ivy.xml,Add Ivy Library 2. Classpath添加ivy依赖,选择项目->右键属性->Java Build Path->Libraries->Add Library...->IvyIDE Managed Dependencies->finish->OK2012-6-20 杭州斯凯网络科技有限公司 20
  • Demo 改造原有的项目 新建项目2012-6-20 杭州斯凯网络科技有限公司 21
  • 选择Ivy的N个理由 使用Ivy 系统构建步骤 系统构建规范 Ivy Resources2012-6-20 杭州斯凯网络科技有限公司 22
  • MIS 目彔结构2012-6-20 杭州斯凯网络科技有限公司 23
  • 目录结构 1. 程序目彔 2. 脚本目彔 目彔 描述 目彔 描述 srcmainjava 主程序 bsh BeanShell脚本 srcmainresource 主程序的配置文件 hyperic hyperic配置 srctestjava 测试程序 sh Shell脚本 srctestresource 测试程序的配置文件 sql Sql脚本 manifest MANIFEST.MF文件 3. 功能单元配置目彔 目彔 描述 private 私有单元配置文件 public 公有单元配置文件2012-6-20 杭州斯凯网络科技有限公司 24
  • Ant Task 根据build.xml中声明,import一个build-app.xml,该文件声明ant的构建任务,svn地址:https://svn2.sky-mobi.com:9991/svn/netdevpublic/allconf/build-app.xmlbuild-app.xml中声明的重要的Ant Task 任务 定义 依赖(depends)resolve 解析依赖report 生成依赖报告 resolveinit 初始化目彔prepare-dep hudson构建的变量设置 …compile 执行编译Java文件 resolve、report、prepare-dep、initcompile-test 执行编译Java测试文件 initclean-all 清理target目彔2012-6-20 杭州斯凯网络科技有限公司 25
  • Ant Task 任务 定义 依赖(depends)clean-deploy 清理classes目彔run-test 运行测试用例 compile、compile-testjar 生成jar包 clean-all、compile、run-testjar-test 生成jar-test包 jar、compile-testsource-jar 生成源码包 jardoc-jar 生成doc包 jarclean-deploy 清理classes目彔make-bin 生成bin目彔 jarmake-dist 生成项目zip make-bin、doc-jarpublish-snapshot 发布snapshot版本 make-dist,jar,source-jar,doc-jarpublish-release 发布release版本 make-dist,jar,source-jar,doc-jar2012-6-20 杭州斯凯网络科技有限公司 26
  • build-app.xml 使用ivy,最频繁的方式是在Ant构建文件中,如果使用的Ant为 1.6.0版本或以上,只需要添加ivy的命名空间到项目中(project标签的属 性) xmlns:ivy="antlib:org.apache.ivy.ant“ <project xmlns:ivy="antlib:org.apache.ivy.ant" > ivy setting <ivy:settings url="http://stcdev.sky-mobi.com:8080/devconf/ivysettings.xml" /> 如果不设置ivysetting,默认读http://ant.apache.org/ivy/history/latest- milestone/samples/ivysettings-default.xml2012-6-20 杭州斯凯网络科技有限公司 27
  • build-app.xml <target name="resolve" description="--> retreive dependencies with ivy"> <ivy:retrieve pattern="${module.target}/lib/[conf]/[artifact]-[revision]-[type].[ext]" conf="compile,test,runtime" type="jar,bundle" /> </target> ivy:retrieve任务复制解析好的依赖到你的文件系统的任何位置,它是 一个post resolve任务,拥有post resolve任务共有的所有的行为和属 性。2012-6-20 杭州斯凯网络科技有限公司 28
  • retrieve 属性 描述 必须pattern 用来复制依赖的正则表达式 No,默认${ivy.retrieve.pattern}conf 用于获取配置的列表,逗号分隔 No,type 可以接受的制品类型 No,默认为所有类型都接受pattern="${module.target}/lib/[conf]/[artifact]-[revision]-[type].[ext]“获取最后一次解析调用的所有依赖到lib目彔中,依赖将分隔在按照组织命名的目彔中,每个conf目彔包含对应的带修订版本和制品类型依赖conf="compile,test,runtime“声明了三个配置compile、test、runtime,那么lib目彔应该是这样的:lib compile stc-bean-1.0.6-jar.jar test stc-bean-1.0.6-jar.jarruntime stc-bean-1.0.6-jar.jar2012-6-20 杭州斯凯网络科技有限公司 29
  • post resolve tasks在ivy中有几个任务被认为是后解析任务(post resolve task),并相应地共享公用行为和设置。这些任务是: retrieve cachefileset cachepath artifactproperty (since 2.0) artifactreport (since 2.0)所有这些任务都将自动触发resolve2012-6-20 杭州斯凯网络科技有限公司 30
  • resolve 解析在ivy.xml文件中描述的依赖,并将解析后的依赖放置到ivy缓 存中。 ivy缓存默认为user.home/cache目彔,它通过下面的方式确定路 径: 1. 查找变量ivy.cache.dir 2. 如果没有找到,使用ivy.default.ivy.user.dir/cache ivy.default.ivy.user.dir默认情况使用user.home 所以要改变cache目彔,在build.xml设置 <property name="ivy.default.ivy.user.dir" value="D:ivy" /> 当ivy完成解析任务时,它将输出概要:2012-6-20 杭州斯凯网络科技有限公司 31
  • resolve Tag tag 模式modules number 配置下被解析的依赖模块的总数目,包括间接的依赖 search 需要访问仓库的依赖模块的数目 dwnlded 从仓库下载的依赖模块的数目 evicted 冲突管理器筛选出依赖模块的数目artifacts number 配置下被解析的制品的总数目 dwnlded 从仓库实际下载的制品数目2012-6-20 杭州斯凯网络科技有限公司 32
  • publish 发行当前模块的制品和已解析的描述符(模块声明的ivy文件) 目的是发行当前模块描述符和它声明的发行制品到仓库中,提供给其 他项目使用。 <ivy:publish resolver="share-release" artifactspattern="${release.dir}/[artifact]-[revision]-[type].[ext]" srcivypattern="${module.home}/ivy.xml" pubrevision="${module.version}" update="true" overwrite="true" status="release" />2012-6-20 杭州斯凯网络科技有限公司 33
  • publish 属性 描述 必须resolver 用来发行制品的解析器名称 是 No,默认artifactspattern 用于查找发行制品的正则表达式 ${ivy.publish.src.artifacts.pattern} 用于查找发行制品ivy文件的正 No,默认与artifactspatternsrcivypattern 则表达式 相同pubrevision 用于发行的修订颁布 No,默认为${ivy.deliver.revision} true 时 在 发 行 前 更 新 ivy 文 件 的 No,默认为falseupdate metadata,false相反 true时覆盖仓库中修订版本一样 No,默认为falseoverwrite 的文件,false相反status 发行的status No,默认${ivy.status} publish-snapshot与publish-release,区别在于用的resolver, resolver 的声明在ivysettings.xml中可以找到。2012-6-20 杭州斯凯网络科技有限公司 34
  • WEB 目彔结构2012-6-20 杭州斯凯网络科技有限公司 35
  • 目录结构 目彔结构 术语 描述src 程序目彔resources 程序配置文件WebContent(WebRoot) web目彔2012-6-20 杭州斯凯网络科技有限公司 36
  • build.xml <?xml version="1.0" encoding="UTF-8" ?> <project name="sup-cms" basedir="."> <!--property name="ivy.default.ivy.user.dir" value="D:ivy" /--> <!--设置下面要用到的属性--> <property name="module.name" value="${ant.project.name}" /> <property name="module.version" value="1.0.0" /> <!-- 不同IDE工程的Webcontent不同--> <property name="web.content" value="WebContent"/> <property name="devconf.url" value="http://stcdev.sky-mobi.com:8080/devconf" /> <property name="lib.buildfile" value="build-web.xml" /> <import file="build-web.xml" as="impl"/> <!--import as="impl"> <url url="${devconf.url}/${lib.buildfile}"/> </import--> </project>2012-6-20 杭州斯凯网络科技有限公司 37
  • Ant Task 任务 定义 依赖(depends)resolve 解析依赖report 生成依赖报告 resolveinit 初始化目彔 clean-allprepare-dep hudson构建的变量设置 …compile 执行编译Java文件 resolve、report、prepare-dep、initone-war 打war包 compilemake-dist 把项目打成zip one-warclean-all 清理target目彔clean-deploy 清理classes目彔2012-6-20 杭州斯凯网络科技有限公司 38
  • build-web.xml resolve和report target与mis端声明类似。 其中比较重要,也需要注意的就是打war包,其中classes目彔不使用 WEB-INF自动生成的,而是使用通过compile出来classes。 <target name="one-war" depends="compile"> <war warfile="${dist.war}/${module.name}.war" webxml="${module.webxml}" manifest="${web.content}/META-INF/MANIFEST.MF"> <fileset dir="${web.content}"> <include name="**/*.*"/> <exclude name="**/web.xml"/> <exclude name="**/classes/**"/> </fileset> <classes dir="${module.classes}"/> <lib dir="${compile.lib}/runtime"> <include name="**/*.jar"/> </lib>2012-6-20 杭州斯凯网络科技有限公司 39
  • build-web.xml <manifest> <attribute name="Specification-Title" value="${module.name}"/> <attribute name="Specification-Version" value="${module.version}"/> <attribute name="Implementation-Title" value="${module.name}"/> <attribute name="Implementation-Version“ value="${module.version}- ${dist.build.number}-${dist.build.id}-[${dist.revision}]"/> <attribute name="Specification-Vendor" value="SKY NETWORK TECHNOLOGIES CO.,LTD"/> <attribute name="Implementation-Vendor" value="SKY NETWORK TECHNOLOGIES CO.,LTD"/> </manifest> </war> </target>2012-6-20 杭州斯凯网络科技有限公司 40
  • 选择Ivy的N个理由 使用Ivy 系统构建步骤 系统构建规范 Ivy Resources2012-6-20 杭州斯凯网络科技有限公司 41
  • Ivy Resources Java开发库管理平台(公司)http://stcdev.sky-mobi.com:8080/nexus/ Mvn Repositories  Mvnrepository  IBiblio maven repository  JBoss Maven Repository Find Jarhttp://www.findjar.com/ Ivy专栏http://www.iteye.com/wiki/ivy Apache Ivy2012-6-20 杭州斯凯网络科技有限公司 42
  • 提问与讨论2012-6-20 杭州斯凯网络科技有限公司 43