我使用不同的常春藤配置向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中的模块。
答案 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”将依赖项拉入“默认”配置。但是你真的希望它们在“编译”中,将它们包含在你的编译类路径中。