Gradle发布多个独立工件

时间:2013-09-17 00:02:38

标签: gradle ivy

我有一个使用Gradle和ivy-publish插件构建的项目。除了构建JAR之外,build.gradle还执行一个执行XmlFileGenerator.main()的运行任务,该任务生成5个XML文件(称为A,B,C,D和E)。我希望将这些XML文件发布到Ivy存储库中;每个应该具有相同的组和版本,但是具有不同的模块和不同的文件名,并且每个应该具有其自己仅列出其自身的ivy.xml。

我可以设置已发布文件的文件名,但模块名称与我的项目名称保持一致,因此我的所有XML文件都以相同的模块名称发布,而不是在独立模块下发布

因此,例如,我希望A.xml在{myLocalIvyRootDir}\my-group\A\{version}\xmls\A-{version}.xml发布,我希望B.xml在{myLocalIvyRootDir}\my-group\B\{version}\xmls\B-{version}.xml发布。但是A代表{myLocalIvyRootDir}\my-group\my-project\{version}\xmls\A-{version}.xml发布,B代表{myLocalIvyRootDir}\my-group\my-project\{version}\xmls\B-{version}.xml发布。

这是build.gradle的相关子集(仅显示A但不显示B-E):

apply plugin: 'ivy-publish'

group = 'my-group'

publishing {
    publications {
        ivy(IvyPublication) {
            artifact jar
        }
        aXml(IvyPublication) {
            artifact('target/A.xml') {
                name = 'A'
                extension = 'xml'
                type = 'xml'
            }
        }
    }
}

mainClassName = 'my-group.my-project.XmlFileGenerator'

我尝试使用以下代码在发布上定义模块属性:

        aXml(IvyPublication) {
            module 'A'
            artifact('target/A.xml') {
                name = 'A'
                extension = 'xml'
                type = 'xml'
            }
        }

但是我收到以下错误消息:

> org.gradle.api.internal.MissingMethodException: Could not find method module() for arguments [A] on org.gradle.api.publish.ivy.internal.publication.DefaultIvyPublication_Decorated@32384c50.

我尝试使用以下代码动态更改rootProject.name:

publishing {
    publications {
        ivy(IvyPublication) {
            artifact jar
        }
        project.metaClass.getName {"A"}
        aXml(IvyPublication) {
            artifact('target/A.xml') {
                name = 'A'
                extension = 'xml'
                type = 'xml'
            }
        }
    }
}

没有产生错误,也没有改变行为。

我觉得我可能只是错过了一些小东西,但不知道它是什么。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

事实证明,在这些属性可用之前,这个特定的项目仍指向Gradle 1.6(它们是在1.7中添加的)。因此,所需要的只是指向1.7,并且一切都按预期工作。