project building
project building such as ant, maven, Ivy
摘要: 在jenkins上建立了一个job,通过标准的maven命令来执行打包测试和上传artifact到nexus仓库。随后发现有些性能问题:sonar的job执行时,需要重新update SCM,然后需要再次执行test,之后才能进行真正属于sonar的任务如代码检测等。明显update SCM 和执行test是重复了原有job,纯属浪费。这个重复执行问题随着测试案例和测试执行时间的增加,会越来越明显。因此需要考虑消除这里的重复问题,减少build的时间,并节约jenkins的资源。
阅读全文
摘要: 近期自己折腾自己,放着正统的maven + junit不用,却准备用ant + ivy 替代maven做依赖管理,用testng替代junit做单元测试。
阅读全文
摘要: 在讨论这个问题前,先简单的介绍一下双重解析器的工作原理:顾名思义,双重解析是双重的:它由一个ivyResolver和一个 artifactResolver组成,其中ivyResolver负责解析ivy的模块描述符,而artifactResolver则用于解析制品。换言之,ivyResolver用来指明需要什么,而artifactResolver则负责获取具体的制品文件。
第一次在学习ivy的过程中看到ivy中的双重解析器,就感觉设计非常的不错,可以比较好的解决这方面的问题。只要维护好ivyResolver中的依赖,则整个系统中的依赖都被限制在这个范围中。比如如果有人想用spring2.5.6之外的版本,哼哼,ivyResolver解析器会不工作的......
但是,在实际的使用过程中发现,双重解析器的工作模式有点问题:如果目标依赖在ivyResolver中可以找到则情况正常,但是如果目标依赖在 ivyResolver中没有定义,ivy居然会在artifactResolver的继续查找!然后报告说依赖解析成功已下载云云,而不是我
阅读全文
摘要: 在maven中,对于一个依赖,除了groupId,artifactId,version这三个属性来作为标志之外,还有一个特殊的属性可用: classifier。
ivy中依赖对应的有属性org,name,rev,分别对应到maven中的groupId,artifactId,version.
但是dependency没有和maven的classifier属性相对应的属性,因此无法表示dependency的classifier。这样就出现问题了,比如上面的testng 的例子,在ivy中如果将对testng的依赖定义写成上面的样子,则解析时是无法获取到我们想到的依赖 testng-5.10.jar的。
那么,在ivy中如何指定classifier属性呢?
阅读全文
摘要: 如果你已经成功的跟随并理解了所有的教程,可能你还是需要得到更好的关于如何在现实世界中只用ivy的描述。
这里有一些有关系的链接.
阅读全文
摘要: 现在你已经看到从一个已经存在的仓库创建你自己的仓库是如何的简单,你可能会想知道如何处理更加复杂的情况,例如当源仓库和目的地仓库不遵循相同的命名约定。
当你有一个已经存在的仓库并且希望从大量的不遵循相同的命名转换的公共仓库中获益时,这个问题非常常见。或者仅仅是因为你发现你作为基础使用的仓库不够一直- 为什么所有的apache commons模块不适用org.apache.commons 组织?历史原因。但是如果你安装你自己的仓库,你可能不想从历史中蒙受损失。
幸运的是,对于这种问题ivy有一种非常强大的答复:namespaces.
阅读全文
摘要: 在这个步骤中我们使用install任务来从maven2 仓库安装模块到一个基于文件系统的仓库。我们首先安装一个不带依赖的模块,然后安装一个带有依赖的模块。
阅读全文
摘要: install任务让你从一个仓库复制一个模块或者模块集合到另一个仓库。这对于构建和维护一个企业或者团队仓库非常有用。如果你不想你的团队中的开发人员都访问公共的maven2仓库(例如为了控制哪些模块可以在你的公司或者你的团队中使用),答复开发人员的请求来手工增加新的模块或者新的版本在某些时候变得令人厌烦。
幸运的是install任务可以在这里提供帮助: 你可以为你的用于维护目标企业仓库的仓库维护构建使用特定的设置。这些设置将指向另一个仓库(例如maven2 公共仓库),因此你只需要使用简单的命令行要求ivy安装你需要的模块。
为了演示这个我们将首先使用个一些基本的ivy设置文件来展示它是如何工作的,然后我们将使用高级命名空间特性来演示如何在源仓库和目标仓库之间处理命名不匹配。
阅读全文
摘要: 这个教程介绍ivy文件中的模块配置的使用。ivy模块配置事实上是一个非常重要的概念。某些人甚至告诉我使用ivy而不用ivy配置就像吃乳酪而不动就在你旁边的Chateau Margaux 1976!
严肃的说,ivy中的配置可以更好的理解为你的模块的视图,你将可以看到在这里他们将如何被高效地使用。
阅读全文
摘要: 在上一个教程中,你已经看到如何处理两个简单项目之间的依赖。
这个教程将引导你完成在一个更加复杂的环境下的ivy使用。这个教程的所有源文件在ivy发行包的src/example/multi-project下可以得到。
阅读全文
摘要: 这个示例将举例说明在两个项目之间的依赖。
depender项目声明它使用dependee 项目。我们将阐明两个事情:
* 被独立的项目声明的公共类库将被依赖的项目自动获取
* depender项目将获取dependee项目的"最新"版本
阅读全文
摘要: 在一些情况下,会发生这样的事情:你的模块描述符(ivy文件,maven pom, ...)被放置在一个地方,而模块的制品(jars,...)在另外一个地方。
双重解析器用于满足这种类型的需求,而这个教程将展示如何使用它。
阅读全文
摘要: 这个例子演示模块是如何被多解析器获得的。使用多解析器在很多情况下是非常有用的,这里是一些例子:
* 来自发行的单独的集成构建
* 为第三方模块使用公共仓库并且为内部模块使用私有仓库
* 使用一个仓库来存储那些在无法管理的公共仓库里里面的不清晰的模块
* 使用本地仓库来暴露在一个开发人员的位置上生成的构建
在ivy中,多解析器的使用是通过一个名为解析器链的复合解析器来支持的。
在我们的例子中,我们将简单的展示如何使用两个解析器,一个在本地仓库而另一个使用maven2仓库。
阅读全文
摘要: ivy绑定一些默认设置,这使得在通常环境下使用ivy很容易。这个教程,接近于参考文档,解释这些默认设置是什么和他们怎样调整来满足你的需要。
为了完整的理解设置的概念和你可以用它们做什么,我们建议阅读其他和设置相关的教程(如Multiple Resolvers 和 Dual Resolver)或者设置文件的参考文档。
阅读全文
摘要: 在这个例子中,我们将看到使用ivy的一个最简单的方式。不使用任何特殊设置,ivy将使用maven2 仓库来解析你在ivy文件中声明的依赖。让我们来看一眼涉及到的文件的内容。
你将在ivy发行包的src/example/hello-ivy 目录下找到这个教程的源文件。
阅读全文
摘要: 学习的最佳方式是实践!这是ivy教程将帮助你做到的,发现一些伟大的ivy特性。
这里是非常优先的教程,它甚至不需要安装ivy,如果你已经正确安装了ant和jdk,甚至只需要花费不到30秒的时间
阅读全文
摘要: 在ivy中有几个任务被认为是后解析任务(post resolve task),并相应地共享公用行为和设置。
这些任务是:
* retrieve
* cachefileset
* cachepath
* artifactproperty (since 2.0)
* artifactreport (since 2.0)
阅读全文
摘要: cachefileset,为配置构建一个有ivy缓存中的制品组成的ant fileset 从1.2版本起)。
这是一个后解析任务,有所有后解析任务共有的所有行为和属性。注意这个任务不依赖retrieve,因为构建的fileset是由ivy缓存中的制品直接构成的。
阅读全文
Full project building Archive