0

我刚刚做了一个非常丑陋的黑客攻击。

我有一个模块 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" />

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

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

在模块B中:

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

这有效,但看起来很丑陋。因为我必须在 ANT 中生成如下所示的文件:

moduleA-SNAPSHOT.test.jar

依赖同一模块的多个工件的任何巧妙解决方案?

这个问题 id 不同于: 如何解决模块 X 的多个工件被检索到 Apache Ivy 中的同一个文件?

4

1 回答 1

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 也使用配置,您可以使用其中之一。

于 2012-07-26T19:23:31.320 回答