web-dev-qa-db-fra.com

Construire un uberjar avec Gradle

Je suis novice Gradle. Je veux construire un uberjar (AKA fatjar) qui inclut toutes les dépendances transitives du projet. Quelles lignes dois-je ajouter à mon "build.gradle"?

Voici ce que j'ai actuellement: (Je l'ai copié quelque part il y a quelques jours, mais ne me souviens pas d'où.)

task uberjar(type: Jar) {
    from files(sourceSets.main.output.classesDir)

    manifest {
        attributes 'Implementation-Title': 'Foobar',
                'Implementation-Version': version,
                'Built-By': System.getProperty('user.name'),
                'Built-Date': new Date(),
                'Built-JDK': System.getProperty('Java.version'),
                'Main-Class': mainClassName
    }
}
35
missingfaktor

Avez-vous essayé l'exemple fatjar dans le gradle cookbook ?

Ce que vous cherchez est le plugin shadow pour gradle

32
tim_yates

J'ai remplacé le task uberjar(.. avec les éléments suivants:

jar {
    from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }

    manifest {
        attributes 'Implementation-Title': 'Foobar',
                'Implementation-Version': version,
                'Built-By': System.getProperty('user.name'),
                'Built-Date': new Date(),
                'Built-JDK': System.getProperty('Java.version'),
                'Main-Class': mainClassName
    }
}

Les exclusions sont nécessaires car en leur absence vous frapperez this issue.

39
missingfaktor

Ajoutez simplement ceci à votre Java.

mainClassName = "my.main.Class"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

Cela se traduira par le fichier [nom_module]/build/libs/[nom_module] .jar.

7
Bao Le

J'ai trouvé cela projet très utile. En l'utilisant comme référence, ma tâche uberjar Gradle serait

task uberjar(type: Jar, dependsOn: [':compileJava', ':processResources']) {
    from files(sourceSets.main.output.classesDir)
    from configurations.runtime.asFileTree.files.collect { zipTree(it) }

    manifest {
        attributes 'Main-Class': 'SomeClass'
    }
}
5
boechat107