web-dev-qa-db-fra.com

Exécution d'un fichier jar exécutable construit à partir d'un projet basé sur Gradle

J'ai un projet autonome qui est basé sur gradle. Quand je fais gradle build, le pot est généré sous build/libs. Comment exécuter ce fichier exécutable à partir de la ligne de commande? J'ai essayé : Java -cp build/libs/foo.jar full.package.classname mais je reçois noClassFoundException pour les classes qui ont été importées. Comment inclure des jars dépendants dans le chemin de classe?

21
coder

Puisque la question est marquée avec la balise gradle, je suppose que vous voulez exécuter le pot à partir de la construction gradle. Je suppose également que vous utilisez le plugin Java pour votre build gradle.

Ajoutez les lignes suivantes dans votre gradle:

task runFinalJar(type: JavaExec) {
   classpath = files('build/libs/foo.jar')
   classpath += sourceSets.main.runtimeClasspath
   main = full.package.classname
}

Vous pouvez maintenant inclure votre tâche dans le processus de génération:

build.dependsOn.add("runFinalJar")

Ou exécutez-le simplement en ligne de commande:

gradle build runFinalJar

UPDATE Il est plus propre d'utiliser le plugin d'application comme l'a suggéré Peter

16
Eugen Martynov

Soit utilisez le plugin d'application pour créer une archive contenant votre code, ses dépendances et scripts de démarrage, soit créez un fat Jar exécutable. Ce dernier ne doit pas être fait de manière naïve, mais avec le plugin gradle-one-jar (ou similaire).

7
Peter Niederwieser

Ajouter une tâche simple pour exécuter le bocal

task runJar(type: JavaExec) {
    main = "-jar";
    args jar.archivePath
}
7
Sylvain

Je pense que les réponses vont au-delà de ce qu'est réellement la question. La question est, ou peut être reformulée comme, comment exécuter un JAR que gradle construit.

L'interrogateur déclare qu'ils ont essayé Java -cp build/libs/foo.jar full.package.classname en vain.

La syntaxe correcte est Java -jar build/libs/foo.jar, ou si le JAR est juste là, évidemment c'est alors juste Java -jar foo.jar comme d'habitude.

La question doit être modifiée pour plus de clarté, à mon humble avis.

4
Thufir

Je suis un débutant, donc mes explications ici seront simplistes. Ma build.gradle le fichier ne contient qu'une seule ligne: apply plugin: 'Java'. J'ai un hello world Java dans src/main/Java/org/dx/test/App.Java. Depuis la commande Shell, j'ai tapé: gradle build. Et puis j'ai vu ce fichier jar créé comme par magie:

build/libs/helloworld.jar

Toutes les réponses ci-dessus n'ont pas fonctionné. Ce qui a fonctionné pour moi, c'est:

Java -cp build/libs/helloworld.jar org.dx.test.App

Maintenant, je sais que Gradle est plein de sorcellerie, donc je suis sûr que ma situation peut ne pas refléter pleinement votre situation. Les actions sont les suivantes:

  1. Créez cette seule ligne build.gradle fichier
  2. Créez le App.Java sous l'emplacement du dossier prescrit par le médecin
  3. Tapez gradle build
0
typelogic