2013-02-15 41 views
2

正如标题所示,这主要是我们用于Java项目的依赖项解析的Ivy。我们只是设立了常春藤,所以我可能不知道所有的事情。常春藤:将所有依赖项安装到共享存储库

这是我的问题:比方说,我有一个模块A,依赖于B,C,D,E和whatnot。我知道我可以轻松地将模块A发布到我的共享库。这样可行。我想要的是,Ivy将模块A依赖的所有模块从公共存储库复制到共享存储库。我检查了ivy:install任务,这不完全是我想要的(或者我可能误解它是如何工作的)。该example说:

<ivy:install organisation="apache" module="commons-lang" revision="2.0" from="ivyrep" to="myfsresolver"/> 

fromto属性是强制性的,从例子,我想它为一个依赖是已知库内部,并具有特定修订。我将不得不写一个ANT任务,明确地分别安装每个依赖项。

我需要什么,就是告诉常春藤 - 执行解决 - 发布/安装用自己的名字都发现依赖关系,从他们的源代码库修订版本,其中已发现到我的共享资源库

所以to属性可能有意义,可能是conf属性,但不是name,revisionfrom

所以,我正在寻找一个任务一样

<ivy:install to="shared"/> 

,将暂时安装所有的依赖关系(即使不依赖模块本身)到我的共享资源库,我们甚至可以建立没有连接到互联网或当公共存储库关闭。

+0

什么是您需要解决的底层_problem_?一个maven代理可能就足够了。 – 2013-03-02 23:15:46

+0

目前,我们正在从主要由NetBeans/IDE驱动的开发过渡到可自动化的ANT/ivy驱动方法,从而实现持续集成。我们需要解决的问题或者我们试图实现的问题是独立于公共存储库和我们的互联网连接。从长远来看,图书馆和整个知识库可能无法使用。因此,尽快发布版本可用,所有依赖项必须从我们的内部共享仓库中可用。 – jaw 2013-03-11 09:08:07

+1

我发现像这样的事情很容易得到,如果你去完全maven,但你会得到很多其他的限制。你为什么选择蚂蚁+常春藤? – 2013-03-11 09:45:36

回答

3

这不是最好的解决方案,但可能的工作是使用2个存储库。

使用第一个存储库发布模块A,然后使用ivy将A及其所有依赖项复制到第二个存储库。为此,您可以使用install任务。在from属性中,您将指定chain resolver指向第一个存储库和公共存储库,并在to属性中指定您的共享存储库。

我在这样的设置中没有使用Ivy,但我们成功地使用install将包括所有传递依赖项的工件从公共存储库复制到我们自己的存储库,因此我不明白为什么这不应该起作用。

+0

这是一种丑陋的黑客,但它确实有效!我已经有一个Ant任务'发布 - local'是做'<常青藤:决心/> \t \t <常青藤:发布状态= “释放” 解析器= “本地” 覆盖= “真”> \t \t \t <文物模式=“$ {dist.dir}/[artifact] - [revision]( - [classifier])。[ext]”/> \t \t'。然后,我添加了一个新任务'install',将= '这取决于'publish-local'和'init',它设置一些环境变量并调用'' – jaw 2013-02-18 17:31:16

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> 
相关问题