2012-09-15 12 views
5

Soy nuevo en gradle y me gustaría tener acceso a mi repositorio de artefactory. Si pongo todas las configuraciones en una secuencia de comandos de compilación, la compilación tiene éxito. Estas son las partes pertinentes de mi build.gradle:Gradle: no se puede configurar artefactory desde un script de compilación externo

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

Ahora, me gustaría sacar la parte Artifactory en un guión Gradle separado para una mejor organización. Aquí es donde la compilación sale mal. De manera bastante sorprendente, me sale el siguiente error incluso si copio mi build.gradle a foo.gradle, y el cambio build.gradle a sólo contiene la única línea

apply from: 'foo.gradle' 

El error es

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. 

En caso de que esto no sea un error, ¿alguien puede explicar este comportamiento de gradle's apply from y proponer una solución?

Gracias

Respuesta

5

La parte apply from se analiza una vez que el script de construcción ya está configurado, por lo que contar Gradle dónde encontrar los plugins con el ID específico es demasiado tarde. Vas a tener que mantener la parte buildscript en el guión, o ponerlo en el init script:

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

podría utilizar un ejemplo de cómo podría funcionar en un guion de inicio Lo intenté, pero no pude ejecutar el script de inicio y configurar las cosas correctamente. –

+1

Bueno, es exactamente de lo que está hablando la sección 60.5. Ejemplo agregado. – JBaruch

1

También puede utilizar el nombre de clase completo para aplicar los plugins en su script de ayuda:

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 

Tenga en cuenta que Gradle no encontrará los complementos si coloca comillas alrededor del nombre de la clase, como lo haría normalmente con los nombres de los complementos.

Así es como me encontré con el nombre de clase para el plugin Artifactory:

  1. he descargado el plugin que fue afortunadamente open source.

  2. He buscado el nombre del complemento entre los archivos y he encontrado artifactory-puplish.properties.

  3. Contenía el propiedad siguiente: implementation-class=org.jfrog.gradle.plugin.artifactory.ArtifactoryPublicationsPlugin

El source of nexus-workflow tiene el archivo no hay tales propiedades así que busqué hasta que encontré

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