对同一模块的多个工件的依赖性

时间:2012-07-26 10:08:31

标签: ant ivy

我刚做了一个非常难看的黑客。

我有一个生产两个罐子的模块A.

moduleA.jar and moduleA.test.jar

module.test.jar由同一存储库中的其他项目使用,不会再发布到其他存储库。

我将此添加到moduleA的ivy.xml

<publications>
    <artifact name="moduleA" type="jar" ext="jar" conf="compile"/>

    <artifact name="moduleA.test" type="jar" ext="jar" conf="test"/>
</publications>

我如何在moduleB中使用它。我知道Maven不支持每个模块的多个工件,我在某处读到了IVY支持的。 我似乎没有把它写下来。

我在moduleB的ivy.xml中试过这个:

<dependency org="my.org" name="moduleA" rev="SNAPSHOT" conf="compile,test->default,test" />
<dependency org="my.org" name="moduleA.test" rev="SNAPSHOT" conf="compile,test->default,test" />

但这显然不起作用,因为'name'是模块的名称而不是工件。我有一个使用type属性的工作: 在moduleA中:

<artifact name="moduleA" type="test.jar" ext="jar" conf="test"/>

并在moduleB中:

<dependency org="my.org" name="moduleA" rev="SNAPSHOT" conf="compile,test->default,test" />

这很有效,但看起来很难看。因为我必须在ANT中生成这样的文件:

moduleA-SNAPSHOT.test.jar

依赖于同一模块的多个工件的任何简洁解决方案?

这个问题与以下内容不同: How do I solve Multiple artifacts of the module X are retrieved to the same file in Apache Ivy?

1 个答案:

答案 0 :(得分:1)

假设模块A看起来像这样:

<info organisation="my.org" module="moduleA" .../>

<configurations>
    <conf name="compile description="???"/>
    <conf name="test    description="???"/>
    ..
</configurations>

<publications>
    <artifact name="moduleA" type="jar" ext="jar" conf="compile"/>
    <artifact name="moduleA.test" type="jar" ext="jar" conf="test"/>
</publications>

以下模块B声明将检索moduleA.jar

<dependency org="my.org" name="moduleA" rev="latest.integration" conf="default->compile" />

以下模块B声明将检索moduleA.test.jar

<dependency org="my.org" name="moduleA" rev="latest.integration" conf="default->test" />

配置映射使其工作:

default->compile
^          ^
|          |
Local configuration
           |
           Remote configuration

本地配置不必是“默认”。显然,如果模块B也使用配置,您可以使用其中之一。