ivy的哲学是“一个版本,一个jar包”,即要求只要更新jar包,就必须使用新的版本号,但在某些情况下这个原则有问题,比如项目A的测试版本放在产品库的测试区中,更新频率非常高,一天之内就可能更新好几次,这样每次一个新版本号太浪费空间了,一般就都命名为alpha版(或者snapshot版),每次新提交时覆盖旧的jar包以及ivy文件。假设项目B用A的产品,能不能在A提交一个新的jar包后,就自动更新B的本地缓存呢?答案是可以。
要实现本地缓存的自动更新,需要在3处进行说明:
首先是项目B的ivy.xml文件中,在依赖A的条目上指明“changing="true"”:
其次是项目A的ivy.xml的说明部分( 对应的发布产品A的ant任务(ivy:publish)中也不要设置pubdate属性,这样A被发布到产品库中后,其ivy文件的 最后是要在设置文件里指明自动更新,就是在resolvers里将checkmodified设置为true,注意当使用chain resolver时,两处都要设置,例如: 由于发布区不存在alpha版本问题,因此发布区的resolver就不必自动更新了。网上有说checkmodified和changingPattern两个属性都要设置,根据我的实验,后者不设也能实现自动更新,所以就不要自找麻烦了。