2013-01-08 88 views
2

我使用不同的常青藤配置向Maven存储库发布了组件的少数情况。作为一个例子,我采取了以下方法(Ivy Documentation)做同样..使用常青藤向Maven存储库发布多个构件

<ivy-module version="1.0"> 
<info organisation="org.apache" module="filter"/> 
<configurations> 
<conf name="api" description="only provide filter framework API"/> 
<conf name="homemade-impl" extends="api" description="provide a home made implementation of our api"/> 
</configurations> 

<publications> 
    <artifact name="filter-api" type="jar" conf="api" ext="jar"/> 
    <artifact name="filter-hmimpl" type="jar" conf="homemade-impl" ext="jar"/>  
</publications> 

</ivy-module> 

根据上述结构,所产生的伪像滤波器-api.jar文件过滤hmimpl。 jar,并且我生成了一个pom文件filter.pom并将其发布到一个maven仓库中。

现在,当我尝试使用以下解决另一个组件神器过滤器API ..

<dependency org="org.apache" name="filter" rev="3.1" conf="default->api"/> 

但它不工作,我相信我的filter.pom应该包含一些模块这样,使它工作..

<modules> 
     <module>api</module> 
     <module>homemade-impl</module> 
    </modules> 

我是正确的,如果是我该怎么常春藤不同的conf在行家映射到模块。

回答

5

将多个文件发布到Maven存储库是非常棘手的,因为Maven模块通常包含一个工件。 Maven模块确实支持额外的模块构件,这些模件构件在Maven依赖关系中使用“分类器”属性进行引用。

以下答案提供发布多个文件到一个Maven模块的例子:

可观察到ANT脚本使用makepom生成POM文件和这些文件被视为出版物(常春藤出版物部分的一部分)。

欲了解更多背景信息,请参阅以下答案,以解决Maven“范围”与常春藤“构图”之间的区别。

最后,如果你常青藤构建使用配置,它可以配置makepom任务配置和范围之间的映射:

<ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/${ivy.module}.pom"/> 
    <mapping conf="api" scope="compile"/> 
</ivy:makepom> 
0

最有可能的问题是与依赖声明。您可以使用conf =“default-> api”将依赖关系拉入您的'默认'配置。但是你真的希望它们在“编译”配置文件中,将它们包含在你的编译类路径中。

相关问题