我有一个使用 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'
}
}
}
}
这没有产生错误,但也没有改变行为。
我觉得我可能只是错过了一些小东西,但不知道它是什么。谁能指出我正确的方向?