Gradle的publishToMavenLocal任务未正确执行

时间:2014-10-26 20:31:58

标签: gradle publish artifacts multi-project

我正在尝试创建一个基于gradle的多模块项目。还有一个项目包含不同的gradle脚本,可以实现可插入的构建配置。其中一个脚本用于将工件发布到maven存储库。这是该脚本的内容:

apply plugin: 'maven-publish'

configure(subprojects.findAll()) {
    if (it.name.endsWith('web')) {
        publishing {
            publications {
                mavenWeb(MavenPublication) {
                    from components.web
                }
            }
        }
    } else {
        publishing {
            publications {
                mavenJava(MavenPublication) {
                    from components.java
                }
            }
        }
    }
}

build.dependsOn publishToMavenLocal

此脚本包含在其他项目的构建gradle文件中。

apply from: '../../food-orders-online-main/artifact-publish.gradle'

当我运行构建任务时,它总是显示publishToMavenLocal任务是最新的,我无法在本地存储库中找到工件。我做错了吗?

2 个答案:

答案 0 :(得分:8)

通过调整here的答案,它对我有用。

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        mavenLocal()
    }
}

答案 1 :(得分:4)

我认为这可能是gradle错误的表现,模块在以某种方式依赖时会失去publishMavenJavaPublicationToMavenLocal任务。

如果gradle确定模块没有publishMavenJavaPublicationToMavenLocal任务,那么publishToMavenLocal任务将始终报告它是最新的。

我发现的具体情况发生在多模块设置中,具有多级嵌套模块。它可以总结如下,其中共享:域依赖于A

失去其publishMavenJavaPublicationToMavenLocal
root
root gradle build file
->A
  own gradle build file with dependency on shared:domain
-> shared
    gradle build file for shared modules
     -> shared:domain
     -> shared:B

我创建了一个小示例项目,演示了此行为 - https://github.com/piersy/Gradle2MavenPublishBug

我还在这里用gradle记录了一个错误 - http://forums.gradle.org/gradle/topics/the-publishmavenjavapublicationtomavenlocal-task-disappears-from-a-project-when-that-project-is-depended-upon-in-a-specific-way

目前我找到的解决方法是

  1. 删除A对shared:domain
  2. 的依赖关系
  3. 使用其父模块构建文件
  4. 中指定的配置创建一个子模块
  5. 为shared:domain提供自己的gradle构建文件