使用 gradle publish 时,ivy module.xml 不包含所有工件

Posted

技术标签:

【中文标题】使用 gradle publish 时,ivy module.xml 不包含所有工件【英文标题】:ivy module.xml doesn't contain all artifacts when gradle publish is used 【发布时间】:2013-04-23 06:55:19 【问题描述】:

我相信这可能与publish artifact overwrite other artifact in Gradle有关

如果我有一组出版物,例如

publishing 
  publications 
    serverpub(IvyPublication) 
      artifact(ejbJar) 
        name 'ejb' 
      
    
    clientpub(IvyPublication) 
      artifact(clientEjbJar)  
        name 'client-ejb' 
      
    
    modulepub(IvyPublication) 
      artifact(moduleJar) 
        name 'cname-core'
      
    
    persistpub(IvyPublication) 
      artifact(persistenceJar) 
        name 'core-entities'
      
    
  

在“发布”之后

<Project Name>/ivy/<version>/ivy/ivy-<version>.xml

文件只包含出版物列表中的第一项

<artifact name="ejb" type="jar" ext="jar"/>

如果我将所有工件都归入一个出版物,即。 serverpub 然后 ivy.xml 文件将包含所有正确的工件,但 jar 文件本身都是相同的,因此我与上一个链接有相同的错误。

我是不是做错了什么,因为到目前为止,Gradle 已被证明是在括号中发布工件的痛苦。

【问题讨论】:

【参考方案1】:

您已经声明了四个独立的发布,每个发布都将产生自己的模块描述符。要生成包含多个工件的 Ivy 模块,您必须将它们列在同一出版物下。关于“Jar 文件是相同的”问题,一个最小的独立可重现示例会有所帮助。

请注意,您正在使用的新 ivy-publish 插件仍处于孵化阶段,可能存在不足之处。我们非常感谢您的反馈,以使其变得更好。联系 Gradle 开发人员和专家的最佳地点是http://forums.gradle.org。

【讨论】:

以上是关于使用 gradle publish 时,ivy module.xml 不包含所有工件的主要内容,如果未能解决你的问题,请参考以下文章

ivy:publish 是如何工作的?

将 Gradle 与自定义 Ivy 存储库一起使用

从 ant + ivy 迁移到 gradle

Gradle 搜索 Ivy 服务但未定义 Ivy 配置/存储库

使用 gradle 解决代理存储库上的 ivy 依赖关系会导致资源丢失

如何使用自定义 gradle 插件而不将其发布到 maven/ivy 存储库?