- 浏览: 581846 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (188)
- java (14)
- web (14)
- web service (3)
- 杂谈 (14)
- Version Control (13)
- software test (30)
- linux (17)
- database (3)
- distributed storage and computing (1)
- ejb (7)
- project building (46)
- spring & IOC (2)
- Thread (2)
- xml (2)
- tool software (0)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
- project manager (9)
- OSGI (1)
- nosql (3)
最新评论
-
sp42:
好搞笑
你懂不懂xml! (2) -
cherishmmo2004:
感觉你们都很牛掰,我们做的一个运维平台也是用karaf的,用k ...
基于osgi开发大型的企业应用 -
liubey:
“自作聪明”的使用了读写锁,其实只使用ReentrantLoc ...
编码最佳实践(4)--小心LinkedHashMap的get()方法 -
liubey:
你这个代码是sublist后仍然一直持有这个sub的引用,一般 ...
编码最佳实践(5)--小心!这只是冰山一角 -
xiegqooo:
初学maven(5)-使用assembly plugin实现自定义打包
在上一个教程中,你已经看到如何处理两个简单项目之间的依赖。
这个教程将引导你完成在一个更加复杂的环境下的ivy使用。这个教程的所有源文件在ivy发行包的src/example/multi-project下可以得到。
1) 上下文
这里是这个教程涉及到得项目的概况:
* version 帮助通过版本列表来标识模块
* list 获取目录下的文件列表(递归地)
* size 获取目录下的所有文件或者一个文件集合的总大小
* find 在一个给定目录或者文件列表之间查找匹配给定名称的文件
* sizewhere 给出在一个目录下配置名称的文件的总大小
* console 通过简单的控制台应用提供入口给所有其他模块特性
可以肯定的是这不是旨在展示如何开发一个复杂的应用或者提供高级算法的指示。
而是给出一个简单的理解,关于ant + ivy如何使用来开发一个被分割为多个模块的应用。
现在,这是这些模块如何关联到其他模块:
黄色的模块是在这个教程中要讲述的模块,而蓝色的模块是外部依赖(我们将在这个教程中看到如何生成这个图形)。
如你所见,我们在这里有一个优美关联的彼此相互依赖的模块,每个都依赖其他的最新版本。
2) 示例文件
这个教程的源文件可以在ivy发行包的src/example/multi-project下找到。在这个目录中,你将发现下面的文件:
* build.xml
这是根构建文件,将被所有模块用来调用target,按照他们的依赖的顺序(例如,确保在一个模块的构建通常在任何依赖它的模块之
前)
* common
o common.xml
每个项目的build.xml都会导入的通用构建文件。这个构建定义了被所有项目使用的target。
o build.properties
对所有项目通用的一些属性
* projects
包含所有模块,每个模块一个目录,每个目录下
o ivy.xml
模块的ivy文件,描述它的对其他模块和/或外部模块的依赖。
例如:
< info
organisation ="org.apache.ivy.example"
module ="find"
status ="integration" />
< configurations >
< conf name ="core" />
< conf name ="standalone" extends ="core" />
</ configurations >
< publications >
< artifact name ="find" type ="jar" conf ="core" />
</ publications >
< dependencies >
< dependency name ="version" rev ="latest.integration" conf ="core->default" />
< dependency name ="list" rev ="latest.integration" conf ="core" />
< dependency org ="commons-collections" name ="commons-collections" rev ="3.1" conf ="core->default" />
< dependency org ="commons-cli" name ="commons-cli" rev ="1.0" conf ="standalone->default" />
</ dependencies >
</ ivy-module >
o build.xml
项目的构建文件,主要由一个common构建文件和一个项目特殊属性文件的导入组成:
< property file ="build.properties" />
< import file ="${common.dir}/common.xml" />
</ project >
o build.properties
模块特殊属性 + 查找通用构建文件的属性
wkspace.dir = ${projects.dir}/..
common.dir = ${wkspace.dir}/common
o src
源文件目录,有所有java源文件
注意这里不展示通常的软件开发的良好实践,尤其是你将发现在这些例子中没有任何单元测试,即使我们认为单元测试非常重要。但是这不是这个教程的目标。
现在你对结构有一点更多的了解了,让我们看一下这个教程最重要的部分:通用构建文件。实际上,你已经看到,所有模块的构建文件都仅仅是导入这个通用构建文件,并在他们的ivy文件(你应该开始熟悉)中定义他们的依赖。
因此,这里是这个通用构建文件的一些方面:
1. ivy 设置
< property name ="ivy.local.default.root" value ="${repository.dir}/local" />
< property name ="ivy.shared.default.root" value ="${repository.dir}/shared" />
<!-- here is how we would have configured ivy if we had our own ivysettings file
<ivy:settings file="${common.dir}/ivysettings.xml" id="ivy.instance" />
-->
这个声明只为ivy配置了两个属性: 本地仓库的位置和共享仓库的位置。这是仅为这里进行的配置,因为ivy默认是配置为在团队环境下工作(关于这个的详情请看默认配置教程)。可以肯定的是在实际环境中共享仓库位置将会是在团队共享目录(或者在一个更加复杂的仓库中,再次查看默认设置教程来了解如何使用实际上不同的东西)。你可以从注释中看到如果默认设置不符合你的目标时如何进行设置。
2. 解析依赖
< mkdir dir ="${lib.dir}" /> <!-- not usually necessary, ivy creates the directory IF there are dependencies -->
<!-- the call to resolve is not mandatory, retrieve makes an implicit call if we don't -->
< ivy:resolve file ="${ivy.file}" />
< ivy:retrieve pattern ="${lib.dir}/[artifact].[ext]" />
</ target >
你应该开始熟悉这种ivy的使用方法。我们显式调用resolve来使用ivy文件配置(默认就足够了),然后调用retrieve来从缓存中复制解析的依赖制品到本地lib目录(不带版本号),在IDE中这样使用非常简单,当制品版本更改时IDE配置不会改变。
3. ivy-new-version
<!-- default module version prefix value -->
< property name ="module.version.prefix" value ="${module.version.target}-dev-b" />
<!-- asks to ivy an available version number -->
< ivy:info file ="${ivy.file}" />
< ivy:buildnumber
organisation ="${ivy.organisation}" module ="${ivy.module}"
revision ="${module.version.prefix}" defaultBuildNumber ="1" revSep ="" />
</ target >
这个target使用ivy来查找模块的新版本。为了获取关于我们正在处理的模块的详情,我们直接使用在ivy文件中通过ivy:info任务找到的信息。然后buildnumber 任务用来获取一个新的版本,基于我们通过属性设置前缀,默认它将会是1.0-dev-b(在通用构建属性文件中看一下module.version.target的默认值)。每个被这个通用构建文件构建的模块都可以很容易的通过在它的模块特有的build.properties中设置一个不同的module.version.target,或者设置覆盖module.version.prefix.来覆盖这个。为了获取新的修订版本,ivy扫描仓库来获取最新的带有给定前缀的可用版本,并在这个版本上增加1.
4. publish
< ivy:publish artifactspattern ="${build.dir}/[artifact].[ext]"
resolver ="shared"
pubrevision ="${version}"
status ="release"
/>
< echo message ="project ${ant.project.name} released with version ${version}" />
</ target >
这个target在共享仓库中发布模块,使用在version属性中找到的修订版本,这是在其他target中设置的(在上面我们已经看到是基于ivy-new-version)。当模块到达一个特定的里程碑时,或者任何你想团队可以从模块的一个新版本中获益的时它可以被使用。
5. publish-local
repository" >
< ivy:publish artifactspattern ="${build.dir}/[artifact].[ext]"
resolver ="local"
pubrevision ="${version}"
pubdate ="${now}"
status ="integration"
forcedeliver ="true"
/>
< echo message ="project ${ant.project.name} published locally with version ${version}" />
</ target >
这个和publish任务非常相像,除了这个是在本地仓库中发布修订版本,这仅仅在你的环境下使用不会打扰团队。当你在一个模块中修改一些东西并且想在其他模块中从这些修改中获益,你可以简单的调用在这个模块中调研用publish-local,然后你的其他模块的下一次构建将自动得到这个本地版本。
6. clean-local
< delete dir ="${ivy.local.default.root}/${ant.project.name}" />
</ target >
这个target在当你不想再使用你的本地版本时使用,例如当你发型一个新的版本到整个团队时,或者抛弃你的本地修改并想从团队的新版本中获益时。
7. report
< ivy:report todir ="${build.dir}" />
</ target >
同时生成html报告和图形报告。
例如,为了生成类似这个教程开头展示的那样的图形,你仅仅需要遵循这里给出的说明,graphml文件你将在这里找到
在项目的控制台调用report之后,就这样,你得到了所有你的应用的依赖的清晰的概况。
3) Playing with the projects
你可以使用正规ant命令来玩这个教程。在这个教程的基础目录(src/example/multi-project)下开始,运行ant -p:
Main targets:
clean clean tutorial: delete repository, ivy cache, and all projects
clean-all clean all projects
publish-all compile, jar and publish all projects in the right order
这里给出你可以在这里做什么的注意。为了确认所有你的模块在你的仓库中都至少发布了一个版本(被依赖于其他模块的模块构建要求),你可以运行ant publish-all (这里
是示例的日志)。
你将可以看到ivy在所有模块上调用publish target,按照依赖的顺序,因此被依赖的总是在依赖它的前面构建和发布。随意修改一个模块的源文件(例如修改一个方法名称)和使用这个方法的模块,然后调用publish-all看被依赖的是如何首先编译,发布,然后依赖它的模块可以得到它并成功编译。
然后你可以进入示例项目目录的其中一个(如 projects/find for instance),并运行ant -p:
Main targets:
clean --> clean the project
clean-build --> clean the project built files
clean-lib --> clean the project libraries directory (dependencies)
clean-local --> cleans the local repository for the current module
compile --> compile the project
jar --> make a jar file for this project
publish --> publish this project in the ivy repository
publish-local --> publish this project in the local ivy repository
report --> generates a report of dependencies
resolve --> resolve and retrieve dependencies with ivy
run --> compile and run the project
Default target: compile
你可以看到可用的target,感谢common.xml构建文件的导入。通过调用resolve, publish玩这个项目,并且当你在其他项目中同样做后
看发生了什么。举例来说一个有趣的事情是修改项目的依赖:如果现在模块版本依赖于一个新的通用类库,你将看到一旦这个版本的项目被发布,所有其他依赖于版本的项目都将得到这个类库作为他们间接依赖的一部分。非常简单!如果一个项目引入一些新变化导致依赖于它的项目不稳定,你可以非常简单的修改依赖它的项目的依赖,从latest.integration 到一个固定的稳定版本(可能是这个修改之前的最后版本)。现在保持你的模块可控式非常容易的!
你将非常熟悉使用ivy进行多项目开发,我们希望你能欣赏它的能力和弹性!这些教程仅仅是你的ivy旅程的开始,游览参考文档
来学习关于这些特性的更多内容,加入邮件列表
来分享你的经验并在社区中提问。浏览源文件,打开jira问题,提交补丁,加入并帮助ivy成为最好的依赖管理工具!
发表评论
-
搜索maven依赖的网站推荐
2011-12-02 16:04 4306使用maven填写依赖的时候,常会遇到需要查一下gro ... -
hudson中subversion HEAD check out 的问题及疑惑
2010-09-30 10:56 40近期发现一个问题,hudson执行任务时,经常不能获取 ... -
你走你的阳光道,我走我的独木桥:整合ant ivy 和testng
2010-05-31 16:11 2071近期自己折腾自己,放着正统的maven + jun ... -
slf4j1.6.0-RC0和logback的0.9.20版本不兼容
2010-04-26 08:54 3508今天,尝试使用slf4j + logback的黄金组合,结果发 ... -
fisheye2.2.1 & Crucible 2.2.1 安装配置笔记
2010-04-27 16:48 31781) 下载 从atlassian网站 ... -
让ivy支持maven的classifier属性
2009-10-15 01:56 3180在maven中,对于一个依赖,除了groupId,ar ... -
ivy教程(1)-目录
2009-09-21 23:57 2942学习的最佳方式是实践!这是ivy教程将帮助你做到的 ... -
ivy教程(2)-快速开始
2009-09-22 11:48 3052在这个例子中,我们将看到使用ivy的一个最简单的方 ... -
ivy教程(3)-调整默认设置
2009-09-24 20:58 2346ivy绑定一些默认 ... -
ivy教程(4)-多解析器
2009-09-25 15:28 1790这个例子演示模块是如何被多解析器获得的。使用多解析 ... -
ivy教程(5)-双重解析器
2009-09-27 20:58 1713在一些情况下,会发生这样的事情:你的模块描述符(ivy ... -
ivy教程(6)-项目依赖
2009-09-29 23:32 3000这个示例将举例说明在两个项目之间的依赖。 depen ... -
ivy教程(8)-使用ivy模块配置
2009-10-04 10:15 2660这个教程介绍ivy文件中的模块配置的使用。ivy模块配置事实上 ... -
ivy教程(9)-架设仓库(1)-介绍
2009-10-04 13:42 1846install任务让你从一个仓库复制一个模块或者模 ... -
ivy教程(10)-架设仓库(2)-基础仓库复制
2009-10-04 15:04 3050在这个步骤中我们使用install任务来从mave ... -
ivy教程(11)-架设仓库(3)-使用命名空间
2009-10-09 21:04 2251现在你已经看到从一个已经存在的仓库创建你自己的仓库是如何的简单 ... -
ivy教程(12)-更多例子
2009-10-09 21:29 1815如果你已经成功的跟随并理解了所有的教程,可能你还是需要得到更好 ... -
ivy中文参考文档(21)-ant任务(9)-post resolve tasks
2009-09-15 14:17 14641) post resolve tasks ... -
ivy中文参考文档(20)-ant任务(8)-cachefileset
2009-09-03 23:11 13891) cachefileset 为配置构建一个有iv ... -
ivy中文参考文档(18)-ant任务(6)-deliver
2009-08-31 22:22 14581) deliver 交付当前模块的解析好的描述符, ...
相关推荐
"Laravel开发-ivy 常春藤OMP"可能是某个项目或者教程的名字,暗示着这个项目或教程专注于使用Laravel框架进行开发,并且可能与常春藤(Ivy)有关,而"OMP"可能是该项目的特定模块、组件或缩写,但没有具体的信息,我们...
7. **教程和指南**:Ivy的素材库也可能包括教程文档或视频,指导用户如何使用特定的工具、软件或技术,有助于学习和提升技能。 8. **许可和版权**:使用任何素材时,了解其许可条件非常重要。素材包通常会包含关于...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
它旨在解决传统构建工具如Ant和Maven的限制,并在多项目构建、自动化以及项目配置的灵活性方面提供了改进。Gradle使用Groovy语言或Kotlin编写构建脚本,这种方式比传统的XML配置更加简洁和直观。 ### Gradle的特点 ...
标题中的"angular-ivy-tyqwyw:用StackBlitz:high_voltage:创建"表明这是一个关于Angular Ivy项目,可能是一个教程或者示例代码库,使用了StackBlitz在线开发环境。StackBlitz是一个云端集成开发环境(IDE),支持...
它提供了灵活的构建脚本,支持多项目构建,并且可以与Maven和Ivy仓库无缝集成。在本教程中,我们将详细介绍Gradle 3.2的特性、安装过程以及基本配置。 ### 1. Gradle 3.2 的主要特性 - **性能提升**:Gradle 3.2 ...
这个“ant使用手册(中文教程)”涵盖了Ant的基本概念、配置语法、任务使用以及在Java项目中的实际应用。 1. **Ant基本概念** - **构建文件**:Ant的构建过程通过一个名为`build.xml`的XML文件进行描述,该文件...
- Ivy 是一种较早的依赖管理系统,虽然不如 Maven 和 Gradle 流行,但在某些项目中仍然被使用。 - **分发 ZIP 文件** - 对于不使用构建工具的用户,可以下载 ZIP 文件并手动管理依赖。 - **日志记录(Logging)** ...
标题中的“angular-ivy-wa3fah”很可能是一个Angular项目的特定版本或分支,而“StackBlitz:high_voltage:”则表示这个项目是在在线IDE StackBlitz上创建的,可能是一个示例或者教程,其中“high_voltage”可能是该...
【Android代码-ivyidea】是关于在Android开发中使用IvyIDEA的教程或项目,IvyIDEA是一个集成在IntelliJ IDEA中的插件,它支持Apache Ivy依赖管理工具。Apache Ivy是一种流行的构建管理系统,它允许开发者组织、管理...
通过这个视频教程,开发者可以掌握如何在MyEclipse环境中使用Xfire创建和测试Web服务,以及如何创建对应的客户端。随着技术的发展,虽然Xfire已经被CXF所取代,但其核心概念和流程对于理解现代Web服务的实现仍然具有...
Apache Ant 是一个强大的Java项目构建工具,它被广泛应用于软件开发流程中,特别是在处理复杂的构建过程时。Ant基于XML来定义构建任务,这些任务被称为构建文件(buildfile),其中包含了构建项目的步骤,如编译源...
- **Cygwin**:在Windows环境下,需要使用Cygwin提供的一些工具(如`sed`)。可以从 (`http://www.cygwin.cn/`) 下载并安装Cygwin。 - **环境变量**:将Ant和Cygwin的bin目录添加到系统`PATH`环境变量中。 ##### ...
本教程详细介绍了如何在Linux环境下搭建Nutch爬虫环境,并执行基本的Inject流程。通过本教程的学习,你可以了解Nutch的基本架构与工作原理,为进一步开发复杂的网络爬虫打下基础。未来教程中我们将深入探讨Nutch的...
1. **Nutch的衍生项目**:Nutch不仅仅是一个独立的项目,它的研究和发展过程中孕育出了多个重要的开源项目,包括Hadoop、Tika和Gora。这表明Nutch在大数据处理和搜索引擎技术领域具有深远的影响。 - **Hadoop**:...
- 提供了对单元测试的支持,可以方便地在测试环境中使用Spring的Bean。 - **1.3 使用场景** - Spring框架可以应用于各种类型的Java应用程序,如企业级应用、Web应用等,尤其适合于构建复杂的业务逻辑系统。 ####...
Ivy是一个Apache项目下的开源工具,它能够方便地管理Java项目的依赖关系,简化了构建过程中的依赖问题处理。 - **源代码管理**:Nutch使用**Subversion (SVN)**作为源代码管理系统。SVN是一种集中式的版本控制系统...
- **性能优化**:Gradle 6.7 在多个方面进行了性能优化,包括更快的启动时间和更快的构建执行。 - **更好的缓存**:增强了依赖项解析结果的缓存,减少了不必要的网络请求和磁盘I/O操作。 - **改进的依赖解析**:...