正如标题所说,这是关于Ivy,我们主要用于Java项目的依赖性解析。我们刚刚建立了常春藤,所以我可能不知道一切。
这是我的问题:假设我有一个依赖于B,C,D,E等等的模块A.我知道我可以轻松地将模块A发布到我的共享仓库。这样可行。我想要的是,Ivy将模块A依赖的所有模块从其公共存储库复制到共享存储库。我已经检查了ivy:install
任务,这不是我想要的(或者我可能误解它是如何工作的)。 example说:
<ivy:install organisation="apache" module="commons-lang" revision="2.0" from="ivyrep" to="myfsresolver"/>
from
和to
属性是必需的,从示例中,我猜它适用于已知存储库中具有特定修订的一个依赖项。我必须编写一个ANT任务,明确地单独安装每个依赖项。
我需要的是告诉常春藤 - 执行解决 - 发布/安装所有找到的依赖项及其名称,修订版,从其源代码库中发现它已发布到我的共享存储库
因此to
属性可能有意义,可能是conf
属性,但不是name
,revision
和from
。
所以,我正在寻找像
这样的任务<ivy:install to="shared"/>
将暂时安装所有依赖项(甚至排除依赖模块本身)到我的共享存储库,这样即使没有Internet连接或公共存储库关闭,我们也可以构建。
答案 0 :(得分:3)
这不是最好的解决方案,但可能有用的是使用2个存储库。
使用第一个存储库发布模块A,然后使用ivy将A及其所有依赖项复制到第二个存储库。为此,您可以使用install
任务。在from
属性中,您将提供指向第一个存储库和公共存储库的chain resolver,以及您为共享存储库提供的to
属性。
我没有在这样的设置中使用Ivy,但我们成功使用install
将工件(包括所有传递依赖项)从公共存储库复制到我们自己的存储库,所以我不明白为什么这不应该工作
答案 1 :(得分:2)
这是基于Philipp的回答和我不可读的评论。我只想举几个例子。我总是在每个项目build-ivy.xml
中都包含一个公共build.xml
。此公共构建脚本包含以下任务,这些任务是安装模块所需的,包括对共享存储库的依赖性。
这将读取ivy.xml以填充变量。
<target name="init">
<ivy:settings file="${env.IVY_SETTINGS}/ivysettings.xml"/>
<ivy:info/>
</target>
下一个任务取决于你需要自己实现的清理,编译,打包等各种任务。
<target depends="init,clean-build,clean-dist,dist,package-doc,package-sources" name="publish-local">
<ivy:resolve/>
<ivy:publish status="release" resolver="local" overwrite="true" >
<artifacts pattern="${dist.dir}/[artifact]-[revision](-[classifier]).[ext]"/>
</ivy:publish>
</target>
此任务现在将传递包含依赖项的当前模块传递到共享存储库。
<target name="install" depends="publish-local">
<ivy:install module="${ivy.module}" from="local" to="shared" organisation="${ivy.organisation}" revision="${ivy.revision}" overwrite="true" transitive="true"/>
</target>