2012-09-15 5 views
5

Ich bin neu zu groß und möchte auf meine Artefakt-Repository von ihm zugreifen. Wenn ich alle Konfigurationen in ein Build-Skript einfüge, ist der Build erfolgreich. Hier sind die relevanten Teile meines build.gradle:Gradle: Kann Artefakt von einem externen Build-Skript nicht konfigurieren

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 ... 

Nun würde Ich mag den artifactory Teil in ein separates gradle Skript für eine bessere Organisation ziehen. Hier läuft der Build schief. Ganz überraschend, erhalte ich die folgende Fehlermeldung, auch wenn ich meine build.gradle kopieren foo.gradle und ändert build.gradle enthält nur die einzige Zeile

apply from: 'foo.gradle' 

Der Fehler ist

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. 

In Falls dies kein Fehler ist, kann jemand bitte dieses Verhalten von Gradle apply from erklären und eine Lösung vorschlagen?

Danke

Antwort

5

Der apply from Teil einmal Skript das Build analysiert wird bereits konfiguriert ist, so Gradle zu sagen, wo die Plugins zu finden, mit spezifischer ID zu spät ist. Sie finden den buildscript Teil im Skript halten müssen, oder legen Sie sich in dem init script:

apply from : 'http://link.to/my/gradle.script' 
+0

gefunden Könnte ein Beispiel dafür, wie diese Arbeit in würde ein Init-Skript. Ich habe es versucht, konnte aber das init-Skript nicht ausführen und die Dinge richtig einrichten lassen. –

+1

Nun, genau darüber spricht Abschnitt 60.5. Beispiel hinzugefügt. – JBaruch

1

Sie auch die vollständig qualifizierten Klassennamen verwenden können, die Plugins in Ihrem Hilfsskript anwenden:

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 

Beachten Sie, dass Gradle die Plugins nicht finden wird, wenn Sie den Klassennamen in Anführungszeichen setzen, wie Sie es normalerweise mit Pluginnamen tun würden.

Dies ist, wie ich die Klassennamen für das Artifactory Plugin gefunden:

  1. ich das Plugin heruntergeladen, die open source dankbar war.

  2. Ich suchte nach dem Namen des Plugins unter den Dateien und fand artifactory-puplish.properties.

  3. Es enthielt folgende Eigenschaft: implementation-class=org.jfrog.gradle.plugin.artifactory.ArtifactoryPublicationsPlugin

Die source of nexus-workflow keine solchen Eigenschaften Ich sah mich um Datei so hat, bis ich

plugins-gradle-master/nexus-workflow/src/main/groovy/com/adaptc/gradle/nexusworkflow/NexusWorkflowPlugin.groovy