2016-12-27 2 views
1

J'essaie d'utiliser Gradle en combinaison avec Ant pour construire nos projets OpenEdge. OpenEdge est un langage 4GL d'il y a quelques siècles. ;-)Publier autre chose qu'un jar avec gradle à Nexus

Quoi qu'il en soit, j'ai réussi à télécharger des dépendances jar, mais maintenant je suis coincé dans la façon de publier un fichier PL (Progress Library) dans un référentiel Nexus. La chose est que comme Maven, Gradle semble aussi être fait pour les projets Java.

Ceci est mon script (j'ai aussi un fichier settings.gradle avec rootProject.name = 'Stomp'):

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

group 'be.mips' 
version = '1.4.0-SNAPSHOT' 

repositories { 
    /* 
    Gradle uses the same logic as Maven to identify the location of your local 
    Maven cache. If a local repository location is defined in a settings.xml, 
    this location will be used. The settings.xml in USER_HOME/.m2 takes precedence 
    over the settings.xml in M2_HOME/conf. If no settings.xml is available, Gradle 
    uses the default location USER_HOME/.m2/repository. 
    */ 
    mavenLocal() 
    maven { 
    credentials { 
     username '****' 
     password '****' 
    } 
    url "http://srv-ci-nexus:8082/nexus/content/repositories/MadeApplReleases/" 
    url "http://srv-ci-nexus:8082/nexus/content/repositories/MadeApplSnapshots/" 
    } 
    mavenCentral() 
} 

def stompProgressLibraryFile = file('dist/lib/STOMP.PL') 

artifacts { 
    archives stompProgressLibraryFile 
} 

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

    repositories { 
    maven { 
     // default credentials for a nexus repository manager 
     credentials { 
     username '****' 
     password '****' 
     } 
     // url to the releases maven repository 
     url "http://srv-ci-nexus:8082/nexus/repositories/snapshots" 
    } 
    } 
} 

configurations { 
    antconf 
} 

dependencies { 
    antconf 'be.mips:mips-progress-ant-tasks:1.5.8-SNAPSHOT', 
    'be.mips:mips-pct:1.0-SNAPSHOT', 
    'ant-contrib:ant-contrib:1.0b3' 
} 

/* Loads the jars */ 
ClassLoader antClassLoader = org.apache.tools.ant.Project.class.classLoader 
configurations.antconf.each { 
    File f -> antClassLoader.addURL(f.toURI().toURL()) 
} 

/* Extend clean task */ 
clean.doFirst { 
    delete '_ant_rcode', 'src', 'dist' 
    println 'deleted directories' 
} 

/* Create dist/lib directory as prolib does not create directory automatically */ 
task init(dependsOn: clean) { 
    doLast{ 
    project.file('dist/lib').mkdirs() 
    println 'created dist/lib' 
    } 
} 

ant.importBuild 'build.xml' 

L'exécution gradle me donne la sortie publier suivante:

C: \ Espace de travail \ git-repositories \ OpenEdge \ stomp.git> grad -DDLC = C: \ OpenEdge \ 116 \ Publication DLC: generatePomFileForMavenJavaPublication: compileJava UP-TO-DATE : processResources UP-TO-DATE: classes UP-TO- DATE: jar UP-TO-DATE : publishMavenJavaPublicationToMavenRep ository Impossible de trouver les métadonnées be.mips: Stomp: 1.4.0-SNAPSHOT/maven-metadata.xml dans les régions éloignées (http://srv-ci-nexus:8082/nexus/repositories/snapshots) Ajouter http://srv-ci-nexus:8082/nexus/repositories/snapshots/be/mips/stomp/1.4.0-SNAPSHOT/stomp-1.4.0-20161227.115652-1.pom Impossible de transférer be.mips d'artefact: Stomp: pom: 1.4.0-20161227.115652 -1 de/vers à distance (http://srv-ci-nexus:8082/nexus/repositories/snapshots): Impossible écrire dans la ressource 'être/MIPS/Stomp/1.4.0-SNAPSHOT/Stomp-1.4.0-20161227.115652-1.pom' Ajouter http://srv-ci-nexus:8082/nexus/repositories/snapshots/be/mips/stomp/1.4.0-SNAPSHOT/stomp-1.4.0-20161227.115652-1.jar pourrait transfère pas l'artefact be.mips: stomp: jar: 1.4.0-20161227.115652-1 de/vers la télécommande (http://srv-ci-nexus:8082/nexus/repositories/snapshots): Impossible d'écrire dans la ressource 'be/mips/stomp/1.4.0-SNAPSHOT/stomp-1.4.0-20161227.115652-1.jar' Télécharger http://srv-ci-nexus:8082/nexus/repositories/snapshots/be/mips/stomp/1.4.0-SNAPSHOT/stomp-1.4.0-20161227.115652-1.pl Impossible de transférer l'artefact be.mips: stomp: pl: 1.4.0-20161227.115652-1 de/vers à distance (http://srv-ci-nexus:8082/nexus/repositories/snapshots): Impossible écrire dans la ressource 'être/MIPS/Stomp/1.4.0-SNAPSHOT/stomp-1.4.0-20161227.115652-1.pl' : publishMavenJavaPublicationToMavenRepository ECHEC

Échec: la génération a échoué avec une exception.

  • Qu'est-il arrivé: Échec de l'exécution de la tâche ': publishMavenJavaPublicationToMavenRepository'.

    Échec de la publication publication 'mavenJava' au référentiel 'Maven' Impossible de déployer des artefacts: Impossible de transférer be.mips d'artefact: Stomp: pom: 1.4.0-20161227.115652-1 de/vers distance (http://srv-ci-nexus:8082/nexus/repositories/snapshots): Impossible écrire dans la ressource 'être/MIPS/Stomp/1.4.0-SNAPSHOT/Stomp-1.4.0-20161227.115652-1.pom'

  • Essayez: option Exécuter avec --stacktrace à obtenir la trace de la pile. Exécutez avec l'option --info ou --debug pour obtenir plus de sortie de journal.

BUILD FAILED

Temps total: 1.089 sec

La première chose que je remarque est d'avoir ces tâches java que je ne ai pas besoin. : compileJava,: processResource,: classes,: jar ...

Fondamentalement, j'avais un fichier ant build.xml qui faisait tout ce que je voulais. Mais la gestion de la dépendance chez les fourmis est très mauvaise. J'ai donc décidé d'utiliser Gradle en combinaison avec Ant. Je veux que Gradle fasse la gestion des dépendances pour moi. Jusqu'à présent, le téléchargement des dépendances semble fonctionner correctement (il faudra essayer avec un PL au lieu d'un pot). Mais publier autre chose qu'un pot, comment faites-vous cela?

Lisez beaucoup de la documentation en ligne de Gradle, mais tous les exemples semblent être basés sur java.

Répondre

1

Si vous n'avez pas besoin de compiler du code java, utilisez le plugin base au lieu de java. Aussi, vous devez supprimer from components.java:

apply plugin: 'base' 
apply plugin: 'maven-publish' 

publishing { 
    publications { 
    mavenJava(MavenPublication) { 
     artifact stompProgressLibraryFile 
    } 
    } 
} 

Votre prochaine erreur « Impossible d'écrire à la ressource » est très probablement pas un problème gradle, vérifier l'accès en écriture au référentiel. Avant de publier un dépôt distant, essayez de le publier dans le référentiel local:

Appliquer plugin:

apply plugin: "maven" 

tâche d'exécution install:

$ ./gradlew install 
+0

Thx! Déjà supprimé de components.java. Ensuite, je vais essayer le plugin de base. Étrange que de telles choses ne soient pas bien documentées dans le Guide de l'utilisateur de Gradle en ligne ... –