我有一个使用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'
}
}
}
}
没有产生错误,也没有改变行为。
我觉得我可能只是错过了一些小东西,但不知道它是什么。有人能指出我正确的方向吗?
答案 0 :(得分:0)
事实证明,在这些属性可用之前,这个特定的项目仍指向Gradle 1.6(它们是在1.7中添加的)。因此,所需要的只是指向1.7,并且一切都按预期工作。