2012-09-15 14 views
5

Sono nuovo di gradle e desidero accedere al mio repository artifactory da esso. Se metto tutte le configurazioni in uno script di compilazione, la compilazione ha esito positivo. Qui ci sono le parti rilevanti della mia build.gradle:Gradle: impossibile configurare l'artefatto da uno script di build esterno

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

Ora, vorrei tirare fuori la parte Artifactory in uno script Gradle separata per una migliore organizzazione. Questo è dove la costruzione va storta. Abbastanza sorprendentemente, ottengo il seguente errore anche se copio il mio build.gradle a foo.gradle, e il cambiamento build.gradle per contenere solo la singola linea

apply from: 'foo.gradle' 

L'errore è

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 caso questo non è un bug, qualcuno può spiegare questo comportamento di gradle's apply from e proporre una soluzione?

Grazie

risposta

5

La parte apply from viene analizzato una volta che lo script di build è già configurato, così dicendo Gradle dove trovare i plugin con specifica ID è troppo tardi. Dovrete tenere la parte buildscript nello script, o metterlo nel init script:

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

Potrebbe utilizzare un esempio di come questo dovrebbe funzionare in uno script di init. Ho provato, ma non sono riuscito a far funzionare lo script di init e a configurare correttamente le cose. –

+1

Beh, è ​​esattamente di che cosa parla la sezione 60.5. Esempio aggiunto. – JBaruch

1

È inoltre possibile utilizzare il nome completo della classe di applicare i plugin nel vostro script di aiuto:

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 

Nota che Gradle non troverà i plug-in se inserirai virgolette attorno al nome della classe, come faresti normalmente con i nomi dei plugin.

Questo è il modo che ho trovato il nome della classe per il plugin Artifactory:

  1. Ho scaricato il plugin che era fortunatamente open source.

  2. Ho cercato il nome del plugin tra i file e trovato artifactory-puplish.properties.

  3. conteneva il proprietà seguente: implementation-class=org.jfrog.gradle.plugin.artifactory.ArtifactoryPublicationsPlugin

Il source of nexus-workflow ha file di tali proprietà così mi sono guardato intorno fino a quando ho trovato

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