【问题标题】:Publishing multiple artifacts to maven repository using ivy使用 ivy 将多个工件发布到 maven 存储库
【发布时间】:2012-12-22 00:49:11
【问题描述】:

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

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

【问题讨论】:

    标签: maven ivy


    【解决方案1】:

    将多个文件发布到 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>
    

    【讨论】:

      【解决方案2】:

      很可能,问题出在依赖声明上。您使用 conf="default->api" 将依赖项拉入您的“默认”配置。但是您真的希望它们在“编译”配置中,将它们包含在您的编译类路径中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-04
        • 2013-10-01
        • 2013-09-09
        • 2017-06-28
        • 1970-01-01
        • 1970-01-01
        • 2012-09-30
        相关资源
        最近更新 更多