如何在Ivy解析器模式中使用配置

  • 本文关键字:模式 配置 Ivy build ivy
  • 更新时间 :
  • 英文 :


在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发布第三方作品

最新更新