2

我使用不同的 ivy 配置将组件的一些 atifacts 发布到 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>

根据上面的配置,生成的 artifacts 是filter-api.jarfilter-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>

我是否正确,如果是的话,我如何将不同的常春藤conf映射到maven中的模块。

4

2 回答 2

5

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

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

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

有关更多背景信息,您可能对以下处理 Maven“范围”和常春藤“配置”之间差异的答案感兴趣。

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

<ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/${ivy.module}.pom"/>
   <mapping conf="api" scope="compile"/>
</ivy:makepom>
于 2013-01-08T20:48:12.267 回答
0

Most likely, the problem is with the dependency declaration. You pull the dependency into your 'default' configuration with conf="default->api". But you really want them in the "compile" conf, to include them in your compile classpath.

于 2013-10-30T22:40:30.470 回答