在ivysettings.xml中,我有以下工件的解析器:
<resolvers>
<url name="shared" m2compatible="true">
<artifact pattern="${ivy.shared.default.root}/[orgPath]/[module]/[revision]/[module]-[revision]-[conf].[ext]" />
</url>
</resolvers>
我的ivy.xml文件有两个配置和两个发布:
<configurations>
<conf name="debug"/>
<conf name="release"/>
</configurations>
<publications>
<artifact name="project-debug" type="zip" conf="debug" ext="zip" />
<artifact name="project-release" type="zip" conf="release" ext="zip"/>
</publications>
在build.xml中,我使用ivy:publish:
<target name="publish" "description="--> publish the project in the ivy repository">
<property name="revision" value="${project.revision}"/>
<ivy:publish artifactspattern="${build.dir}/[artifact].[ext]"
resolver="shared"
pubrevision="${revision}"
/>
</target>
已发布工件的文件名不是我所期望的:
project-1.0-default.zip
我想要两个文件:
project-1.0-release.zip
project-1.0-debug.zip
请注意,我不能使用以下模式:
${ivy.shared.default.root}/[orgPath]/[module]/[revision]/[artifact]-[revision].[ext]
这是因为我必须使用的存储库(Archiva)要求工件的形式为[模块]-[修订]-。。。否则我们会得到这样的异常:
Not a valid artifact path in a Maven 2 repository, filename 'project-debug-1.0.zip' doesn't contain version '1.0'.
更新的答案
再看看你的解析器:
<resolvers>
<url....>
<artifact pattern="....../[module]-[revision]-[conf].[ext]" />
</url>
</resolvers>
两个已发布的工件将解析为相同的名称(因为它们共享相同的模块和相同的发布配置"默认")。
请尝试以下arifact模式:
<artifact pattern="....../[artifact]-[revision].[ext]" />
这将产生以下已发布的文件:
project-debug-1.0.zip
project-release-1.0.zip
如果您想在文件名中添加额外的可选属性,请考虑使用额外的属性,例如:
- 尝试在工件模式中使用可选令牌时出错
- ivy:publish如何使用[分类器]属性
老答案
您的构建生成了多少个文件?artifactpattern参数表示只有一个文件?
<ivy:publish artifactspattern="${build.dir}/[artifact].[ext]"
这就解释了为什么只发布一个文件。
关于如何使用ivy发布多个人工制品的示例:
- 适合本地存储库的常春藤教程
- 如何使用ivy和nexus发布第三方作品