Jusqu'à présent, j'ai créé des fichiers JAR exécutables via la fonctionnalité "Exporter ..." d'Eclipse, mais maintenant je suis passé à IntelliJ IDEA et Gradle pour l'automatisation de la construction.
Certains articles suggèrent ici le plugin "application", mais cela ne conduit pas entièrement au résultat attendu (juste un JAR, pas de scripts de démarrage ou quelque chose comme ça).
Comment puis-je obtenir le même résultat qu'Eclipse avec la boîte de dialogue "Exporter ..."?
Les réponses de JB Nizet et Jorge_B sont correctes.
Dans sa forme la plus simple, la création d'un fichier JAR exécutable avec Gradle consiste simplement à ajouter les entrées appropriées au manifeste . Cependant, il est beaucoup plus courant d'avoir des dépendances qui doivent être incluses dans le chemin de classe, ce qui rend cette approche délicate en pratique.
Le plugin d'application fournit une approche alternative; au lieu de créer un JAR exécutable, il fournit:
run
tâche pour faciliter l'exécution facile de l'application directement à partir de la constructioninstallDist
tâche qui génère une structure de répertoires comprenant le JAR intégré, tous les JAR dont elle dépend et un script de démarrage qui rassemble le tout dans un programme que vous pouvez exécuterdistZip
et lesdistTar
tâches qui créent des archives contenant une distribution complète de l'application (scripts de démarrage et JAR)Une troisième approche consiste à créer un soi-disant "fat JAR" qui est un JAR exécutable qui inclut non seulement le code de votre composant, mais également toutes ses dépendances. Il existe quelques plugins différents qui utilisent cette approche. J'ai inclus des liens vers quelques-uns que je connais; Je suis sûr qu'il y en a d'autres.
la source
configurations.runtime
aux dépendances d'exécution du bundle dans le fichier JAR unique..tar
/.zip
files générés?Comme d'autres l'ont noté, pour qu'un fichier jar soit exécutable, le point d'entrée de l'application doit être défini dans l'
Main-Class
attribut du fichier manifeste. Si les fichiers de classe de dépendance ne sont pas colocalisés, ils doivent être définis dans l'Class-Path
entrée du fichier manifeste.J'ai essayé toutes sortes de combinaisons de plugins et ce qui ne l'est pas pour la simple tâche de créer un fichier exécutable et, d'une manière ou d'une autre, d'inclure les dépendances. Tous les plugins semblent manquer d'une manière ou d'une autre, mais finalement je l'ai eu comme je le voulais. Pas de scripts mystérieux, pas un million de mini-fichiers différents polluant le répertoire de construction, un fichier de script de construction assez propre, et surtout: pas un million de fichiers de classe tiers étrangers fusionnés dans mon archive jar.
Ce qui suit est un copier-coller à partir d' ici pour votre commodité.
[Comment] créer un fichier zip de distribution avec des jars de dépendances dans le sous
/lib
- répertoire et ajouter toutes les dépendances à l'Class-Path
entrée dans le fichier manifeste:Hébergé comme un essentiel ici .
Le résultat peut être trouvé dans
build/distributions
et le contenu décompressé ressemble à ceci:Contenu de
MyJarFile.jar#META-INF/MANIFEST.mf
:la source
lib
répertoire du fichier zip / tar produit, mais plutôt danslib
le répertoire parent de, comme le suggère cette réponse. Cette solution semblait fonctionner parfaitement pour moi."lib/$it.name"
en"$it.name"
fera le travail.La solution la moins efficace pour moi était d'utiliser le plugin gradle-shadow-plugin
Outre l'application du plugin, tout ce qui doit être fait est:
Configurez la tâche jar pour mettre votre classe principale dans le manifeste
Exécutez la tâche gradle
Prenez le fichier app-version-all.jar de build / libs /
Et enfin exécutez-le via:
la source
build.gradle
.'com.my.app.MainKt'
. Sans plus d'informations, je ne peux pas vous aider davantage.Avez-vous essayé la tâche 'installApp'? Ne crée-t-il pas un répertoire complet avec un ensemble de scripts de démarrage?
http://www.gradle.org/docs/current/userguide/application_plugin.html
la source
installApp
ne crée pas deMETA-INF/MANIFEST.MF
fichier. Est-ce que je fais quelque chose de mal?installApp
tâche dans la liste des tâches d' Application Plugin . Voulez-vous dire à lainstallDist
place?installApp
été renomméinstallDist
en Gradle 3.0. Voici la note de publication .Merci Konstantin, cela a fonctionné comme un charme avec quelques nuances. Pour une raison quelconque, la spécification de la classe principale dans le cadre du manifeste jar ne fonctionnait pas tout à fait et il souhaitait plutôt l'attribut mainClassName. Voici un extrait de build.gradle qui comprend tout pour le faire fonctionner:
Après avoir exécuté gradle shadowJar, vous obtenez myapp- {version} -all.jar dans votre dossier de construction qui peut être exécuté en tant que java -jar myapp- {version} -all.jar.
la source
Vous pouvez définir un artefact jar dans les paramètres du module (ou dans la structure du projet).
Créer un pot est alors aussi simple que de cliquer sur "Construire un artefact ..." dans le menu Construire. En prime, vous pouvez regrouper toutes les dépendances dans un seul bocal.
Testé sur IntelliJ IDEA 14 Ultimate.
la source
J'ai vérifié plusieurs liens pour la solution, puis j'ai finalement suivi les étapes mentionnées ci-dessous pour la faire fonctionner. J'utilise Gradle 2.9.
Apportez les modifications suivantes à votre build, fichier gradle:
Mentionnez le plugin:
Fournissez le Buildscript:
Fournissez la classe principale:
Créez le fatjar:
Exécutez le fatjar depuis / build / libs /:
la source
Vous pouvez utiliser le plugin SpringBoot:
Créer le pot
Et puis lancez-le
Remarque: votre projet n'a PAS besoin d'être un projet SpringBoot pour utiliser ce plugin.
la source