La création de runnable JAR avec Gradle
Jusqu'à maintenant, j'ai créé runnable JAR fichiers via l'Éclipse "Exporter..." fonctionnalités mais maintenant je suis passé à IntelliJ IDEA et Gradle pour l'automatisation de la compilation.
Quelques articles ici suggèrent la "demande" du plugin, mais ce n'est pas tout conduire au résultat que j'attendais (juste un POT, pas de scripts de démarrage ou quelque chose comme cela).
Comment puis-je obtenir le même résultat Eclipse ne avec la fonction "Exporter..." dialogue?
Vous devez vous connecter pour publier un commentaire.
D'un fichier jar exécutable est juste un fichier jar contenant de la Principale entrée de la Classe dans son manifeste. Donc, vous avez juste besoin de configurer le jar tâche afin d'ajouter cette entrée dans son manifeste:
Vous pourriez aussi avoir besoin d'ajouter classpath entrées dans le manifeste, mais qui serait fait de la même façon.
Voir http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html
chmod +x
attribut d'un fichier n'est pas du tout assez pour faire JAR exécutable et absolument pas la même que Eclipse commandeExport to
n'.Les deux JB Nizet et Jorge_B réponses sont correctes.
Dans sa forme la plus simple, la création d'un exécutable JAR avec Gradle est juste une question d'ajouter les entrées appropriées à la manifeste. Cependant, il est beaucoup plus fréquent d'avoir des dépendances qui doivent être inclus dans le classpath, cette approche délicate dans la pratique.
La plugin d'application offre une autre approche; au lieu de créer un JAR exécutable, il fournit:
run
tâche de faciliter facilement exécuter l'application directement à partir de la générationinstallDist
tâche qui génère une structure de répertoire y compris le POT, tous les Bocaux de qui il dépend, et un script de démarrage qui tire tous ensemble dans un programme, vous pouvez exécuterdistZip
etdistTar
tâches créer des archives contenant une application complète de la distribution (les scripts de démarrage et Bocaux)Une troisième approche consiste à créer un soi-disant "gros BOCAL" qui est un exécutable JAR qui contient non seulement votre code du composant, mais aussi l'ensemble de ses dépendances. Il ya quelques différents plugins qui utilisent cette approche. J'ai inclus des liens vers quelques-uns que je suis au courant; je suis sûr qu'il ya plus.
configurations.runtime
de regrouper les dépendances d'exécution dans le bocal.Comme d'autres l'ont noté, dans le but d'un fichier jar pour être exécutable, l'application du point d'entrée doit être défini dans le
Main-Class
attribut du fichier manifeste. Si la dépendance de fichiers de classe ne sont pas ensemble, alors ils doivent être réglés dans leClass-Path
entrée du fichier manifest.J'ai essayé toutes sortes de plugin combinaisons et ce n'est pas pour la simple tâche de création d'un exécutable jar et en quelque sorte, d'une certaine manière, inclure les dépendances. Tous les plugins semblent manquer d'une manière ou d'une autre, mais enfin je l'ai eu comme je le voulais. Pas de mystérieux scripts, pas de un million de différentes mini-fichiers de polluer le répertoire de construction, une jolie construction propre fichier de script, et par-dessus tout: pas un million de tiers étrangers classe les fichiers fusionnés dans mon jar archive.
Ce qui suit est un copier-coller à partir de ici pour votre confort..
[How-to] créer une distribution fichier zip avec dépendance pots dans le sous-répertoire
/lib
et ajouter toutes les dépendances àClass-Path
entrée dans le fichier manifeste:Accueilli comme un résumé ici.
Le résultat peut être trouvé dans
build/distributions
et décompressé le contenu ressembler à ceci:Contenu de
MyJarFile.jar#META-INF/MANIFEST.mf
:lib
répertoire du fichier zip/tar, mais plutôt danslib
s'répertoire parent, que cette réponse suggère. Cette solution semble fonctionner parfaitement pour moi."lib/$it.name"
à"$it.name"
va faire le travail.Moins d'effort pour moi, la solution a été de faire usage de la gradle-ombre-plugin
Outre l'application des plugin tout ce qui doit être fait est la suivante:
Configurer le pot de tâches de mettre votre classe Principale dans le manifeste
Exécuter le gradle tâche
Prendre la app-version-all.jar de construire/libs/
Et enfin l'exécuter via:
build.gradle
exemple.'com.my.app.MainKt'
. Sans plus d'info, je ne peux pas vous aider davantage.Avez-vous essayé le " installApp de la tâche? N'est-il pas de créer un répertoire complet avec un ensemble de scripts de démarrage?
http://www.gradle.org/docs/current/userguide/application_plugin.html
installApp
ne pas créer unMETA-INF/MANIFEST.MF
fichier. Suis-je en train de faire quelque chose de mal?installApp
tâche dans la liste des tâches de Application Plugin. Vouliez-vous direinstallDist
à la place?installApp
a été renomméinstallDist
dans Gradle 3.0. Voici le note de version.Merci Konstantin, il a travaillé comme un charme avec quelques nuances. Pour une raison quelconque, la spécification de la classe principale dans le cadre de pot manifeste n'a pas assez de travail et qu'elle voulait que l'mainClassName attribut de la place. Voici un extrait de construire.gradle qui comprend tout ce qu'il vous faut:
Après l'exécution de gradle shadowJar vous obtenez myapp-{version}-all.jar dans votre dossier de création qui peut être exécuté en tant que java-jar myapp-{version}-all.jar.
Vous pouvez définir un pot artefact dans les paramètres du module (ou de la structure de projet).
Faire un pot est alors aussi facile que de cliquer sur "Construire artefact..." dans le menu générer. Comme un bonus, vous pouvez regrouper toutes les dépendances dans un seul pot.
Testé sur IntelliJ IDEA 14 Ultimate.
J'ai vérifié tout à fait quelques liens pour la solution, enfin ne les étapes mentionnées ci-dessous pour le faire fonctionner. Je suis à l'aide de Gradle 2.9.
Apportez les modifications suivantes dans votre construction,gradle fichier :
Mention plugin:
Fournir les Buildscript:
Fournir la Classe Principale:
Créer le fatjar:
Exécuter le fatjar de /build/libs/: