0

我有一个使用 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 而不是 BE):

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'
            }
        }
    }
}

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

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

4

1 回答 1

0

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

于 2013-09-17T01:05:25.210 回答