使用常春藤将多个工件发布到maven存储库

时间:2013-01-08 07:46:15

标签: maven ivy

我使用不同的常春藤配置向maven存储库发布了一些组件。举个例子,我采用以下方式(Ivy Documentation)来做同样的事情。

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

根据上面的配置,产生的工件是 filter-api.jar filter-hmimpl.jar ,我生成了一个pom文件 filter.pom 并将其发布到maven存储库中。

现在,当我尝试使用以下内容解决另一个组件中的工件 filter-api 时..

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

但是它没有用,我相信我的filter.pom应该包含这样的一些模块,以使它工作..

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

我是否正确,如果是,我怎样才能将常春藤的不同内容映射到maven中的模块。

2 个答案:

答案 0 :(得分:5)

将多个文件发布到Maven存储库很棘手,因为Maven模块通常包含一个工件。 Maven模块确实支持额外的模块工件,这些工件使用&#34;分类器&#34;在Maven依赖项中引用。属性。

以下答案提供了将多个文件发布到Maven模块的示例:

观察ANT脚本正在使用makepom生成POM文件,并且这些文件被视为已发布的工件(常春藤出版物部分的一部分)。

有关更多背景信息,您可能会对以下答案感兴趣,该答案涉及Maven&#34;范围与#34;之间的差异。和常春藤&#34; congurations&#34;。

最后,如果您的ivy版本使用配置,则可以配置makepom任务以在配置和范围之间进行映射:

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

答案 1 :(得分:0)

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