我有一个多模块ant +常春藤项目。项目之间的依赖关系记录在ivy.xml文件中。
当调用<ivy:retrieve>
时,它将尝试下载所有依赖项,包括本地项目。
如何从检索中排除本地项目?
或者也许以某种方式可以使用Filesystem解析器,它会解析为${projects.dir}/*/ivy.xml
,就像IvyDE对工作区解析器一样。
更新
我想排除仅本地项目,但仍会检索其传递依赖项。 我需要复制IvyDE工作区解析器的行为,但在eclipse之外。
示例
鉴于项目结构:
<dependency org="local" name="local.module2" />
<dependency org="external" name="library1" />
我希望local.module1
能够检索除本地项目(local.module2)之外的所有传递依赖项(local.module2,external.library1),因此有效地留下了external.library1
。
由此我想构建构建类路径,它包含对本地项目的直接引用和对外部库的jar引用。如果是module1:
如果有人想知道为什么 - 我正在努力将常春藤融入现有的构建系统中,而且变化很小。
答案 0 :(得分:0)
在ivy.xml
文件中,添加exclude个实体。
<dependency org="com.vegicorp" name="flubaster"
conf="compile->default" rev="3.3">
<exclude org="com.local"/>
</dependency
这将阻止您在存储本地jar时从“com.local”或您组织的任何内容下载任何内容。
(除非你在谈论这个特定项目的罐子,如果是这样的话,它们根本不应该在你的ivy.xml
文件中。
答案 1 :(得分:0)
我最近遇到了部分常春藤集成到遗留项目中的问题,只是为了从maven世界中获取一些传递依赖,同时保留使用ant的现有构建过程。还必须通过使用假的本地文件系统解析器解析为虚拟jar来避免使用ivy发布项目模块。
<强> ivysettings.xml 强>
<ivysettings>
<settings defaultResolver="default">
<property name="local.maven2.dir" value="${user.home}/.m2/repository/" override="false"/>
<property name="local-project.cache.dir" value="${ivy.settings.dir}/cache" override="false"/>
</settings>
<caches resolutionCacheDir="${local-project.cache.dir}" lockStrategy="artifact-lock" useOrigin="true">
<cache name="local-project" basedir="${local-project.cache.dir}" useOrigin="true"/>
</caches>
<resolvers>
<chain name="default">
<filesystem name="local-maven-2" m2compatible="true" checkmodified="true" changingPattern=".*SNAPSHOT">
<artifact pattern="${local.maven2.dir}/[organisation]/[module]/[revision]/[module]-[revision].[ext]"/>
<ivy pattern="${local.maven2.dir}/[organisation]/[module]/[revision]/[module]-[revision].pom"/>
</filesystem>
<ibiblio name="central" m2compatible="true"
root="http://repo1.maven.org/maven2/"/>
</chain>
<filesystem name="local-project" force="true" checkmodified="true" changingPattern=".*" cache="local-project">
<artifact pattern="${ivy.settings.dir}/dummy.jar"/>
<ivy pattern="${ivy.settings.dir}/[module]-ivy.xml"/>
</filesystem>
</resolvers>
<modules>
<module organisation="example.com" resolver="local-project"/>
</modules>
</ivysettings>
由于未能找到更好的常春藤方法,不得不从蚂蚁中排除虚拟罐子:
<ivy:retrieve pattern="${dependency.export.dir}/[conf]/[artifact](-[revision]).[ext]" type="jar,bundle"/>
<delete>
<fileset dir="${dependency.export.dir}">
<include name="**/*@local-project.jar"/>
</fileset>
</delete>
仍在努力寻找方便exclude provided dependencies with ivy的途径。
如果有人对示例项目源感兴趣,可以在IVY-1443 bug附件中找到它。