使用 com.jfrog.artifactory 插件时未找到方法

No method found while using com.jfrog.artifactory plugin

我是gradle的新手,请原谅我的无知。有一个基本的 gradle 项目。 当我 运行 ./gradlew tasks

时出现以下错误
FAILURE: Build failed with an exception.

* Where:
Build file '<path>/build.gradle' line: 17

* What went wrong:
> No signature of method: build_204u1riu5haork78eb2ib9dc1t$_run_closure2.id() is applicable for argument types: (java.lang.String) values: [com.jfrog.artifactory]
  Possible solutions: is(java.lang.Object), is(java.lang.Object), find(), find(), find(groovy.lang.Closure), find(groovy.lang.Closure)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

以下是我的build.gradle

buildscript {
    repositories {
        maven {
            url '<URL>'
            credentials {
                username = "<USERNAME>"
                password = "<PASSWORD>"
            }
        }
    }
    dependencies {
    classpath(group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '2.0.9')
    }
}

plugins {
   id "com.jfrog.artifactory" version "3.0.1"   //<=== LINE 17
}

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
apply plugin: 'application'

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

artifactory {
    contextUrl = "<URL>"
    publish {
        repository {
            repoKey = 'libs-snapshot-local'
            username = "<USERNAME>"
            password = "<PASSWORD>"
            maven = true
        }
        defaults {
            publications('mavenJava')
        }
    }
    resolve {
        repository {
            repoKey = 'libs-all'
            username = "<USERNAME>"
            password = "<PASSWORD>"
            maven = true

        }
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.7'
    compile 'org.slf4j:slf4j-simple:1.7.7'

    compile 'com.amazonaws:aws-java-sdk:1.9.38'

    testCompile 'junit:junit:4.11'
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.2'
}

我确信这是一个非常基本的问题,这就是为什么当我用谷歌搜索时,没有找到任何解决方案。如果有人能指出我正确的方向或分享 link 到任何以前的相关问题,那就太好了。

如果您使用 Gradle 1.x 进行构建,则可能会发生这种情况。 Gradle plugins DSL was introduced in Gradle 2.1 并且不受旧 Gradle 版本的支持。
您已将 gradle wrapper 配置为使用 Gradle 2.2,但您需要确保您使用的是 gradlew 脚本而不是 gradle

另一种可能性是,如果您的项目中有任何模块具有较低版本的 gradle 工具

例如,我的应用程序模块在构建脚本中具有以下构建工具作为依赖项
类路径 'com.android.tools.build:gradle:2.3.2'

但我有另一个模块,在 buildscript

classpath 'com.android.tools.build:gradle:2.2.0'

中有以下构建工具作为依赖项

在这种情况下,我遇到了以下错误

No signature of method: org.jfrog.gradle.plugin.artifactory.extractor.listener.ProjectsEvaluatedBuildListener$_projectsEvaluated_closure1.doCall() is applicable for argument types: (org.jfrog.gradle.plugin.artifactory.task.ArtifactoryTask_Decorated) values: [task ':uid:artifactoryPublish']


然后改变之后 类路径 'com.android.tools.build:gradle:2.2.0' 到类路径 'com.android.tools.build:gradle:2.3.2' 一切正常。