5

我是 gradle 新手,想从中访问我的工件存储库。如果我将所有配置放入一个构建脚本中,则构建成功。以下是我的 build.gradle 的相关部分:

allprojects {
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'artifactory'
}

// ...

buildscript {
    repositories {
        maven { 
            url 'http://repo.jfrog.org/artifactory/gradle-plugins' 
        }

        maven {
            url artifactory_contextUrl + 'plugins-release'

            credentials {
                username = artifactory_user
                password = artifactory_password
            }
        }
    }

    dependencies {
        classpath(group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '2.0.16')
    }
}


artifactory {
    contextUrl = artifactory_contextUrl

    publish {
        repository {
            repoKey = 'libs-release-local'
            username = artifactory_user
            password = artifactory_password
            maven = true
        }
    }

    resolve {
        repository {
            repoKey = 'libs-release'
            username = artifactory_user
            password = artifactory_password
            maven = true
        }
    }
}


dependencies {
    // My dependencies ...
}

// Rest of the build script ...

现在,我想将工件部分提取到单独的 gradle 脚本中,以便更好地组织。这就是构建出错的地方。非常令人惊讶的是,即使我将 build.gradle 复制到 foo.gradle,并将 build.gradle 更改为仅包含单行,我也会收到以下错误

apply from: 'foo.gradle'

错误是

FAILURE: Build failed with an exception.

* Where:
Script '/path/to/my/project/foo.gradle' line: 5

* What went wrong:
A problem occurred evaluating script.
> Plugin with id 'artifactory' not found.

如果这不是错误,任何人都可以解释 gradle 的这种行为apply from并提出解决方案吗?

谢谢

4

2 回答 2

5

apply from一旦构建脚本已经配置,该部分就会被解析,所以告诉 Gradle 在哪里可以找到具有特定 ID 的插件为时已晚。您必须将该buildscript部分保留在脚本中,或将其放入init 脚本中:

apply from : 'http://link.to/my/gradle.script'
于 2012-09-15T15:05:27.693 回答
1

您还可以使用完全限定的类名在您的帮助脚本中应用插件:

buildscript {
    repositories {
         jcenter() 
         mavenCentral()
    }
    dependencies {
        classpath "com.adaptc.gradle:nexus-workflow:0.5"
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:2.2.4"
    }
}
apply plugin: org.jfrog.gradle.plugin.artifactory.ArtifactoryPublicationsPlugin
apply plugin: com.adaptc.gradle.nexusworkflow.NexusWorkflowPlugin

请注意,如果您在类名称周围加上引号,Gradle 将找不到插件,就像您通常使用插件名称所做的那样。

这就是我找到 Artifactory 插件的类名的方式:

  1. 我下载了谢天谢地开源的插件。

  2. 我在文件中搜索插件的名称,发现 artifactory-puplish.properties.

  3. 它包含以下属性:implementation-class=org.jfrog.gradle.plugin.artifactory.ArtifactoryPublicationsPlugin

nexus-workflow的源没有这样的属性文件,所以我环顾四周,直到找到

plugins-gradle-master/nexus-workflow/src/main/groovy/com/adaptc/gradle/nexusworkflow/NexusWorkflowPlugin.groovy
于 2014-05-08T15:02:13.220 回答