2012-07-26 62 views
0

我只是做了一个非常丑陋的黑客攻击。依赖于同一模块的多个工件

我有一个模块A,它产生两个罐子。

moduleA.jar and moduleA.test.jar 

的module.test.jar在同一仓库被其他项目,将不会进一步发布到其他存储库。

我已将此添加的ivy.xml moduleA

<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" /> 

但这显然没有奏效,因为“名”是不是模块工件的名称。我有大约使用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 

任何很好地解决了因同一模块的多个工件?

这个问题ID不同于: How do I solve Multiple artifacts of the module X are retrieved to the same file in Apache Ivy?

回答

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

+0

它的工作方式非常神奇,谢谢。 我从中学到的另一个一般的东西是不要混淆conf1,conf2,conf3-> conf1,conf2,conf3是不好的做法 – 2012-07-30 11:46:18

相关问题