comment exporter un fichier exécutable jar dans gradle, et ce pot peut exécuter en tant que, d'inclure les bibliothèques de référence
comment exporter un fichier exécutable jar dans gradle, et ce pot peut exécuter en tant que, d'inclure les bibliothèques de référence.
construire.gradle
apply plugin: 'java'
manifest.mainAttributes("Main-Class" : "com.botwave.analysis.LogAnalyzer")
repositories {
mavenCentral()
}
dependencies {
compile (
'commons-codec:commons-codec:1.6',
'commons-logging:commons-logging:1.1.1',
'org.apache.httpcomponents:httpclient:4.2.1',
'org.apache.httpcomponents:httpclient:4.2.1',
'org.apache.httpcomponents:httpcore:4.2.1',
'org.apache.httpcomponents:httpmime:4.2.1',
'ch.qos.logback:logback-classic:1.0.6',
'ch.qos.logback:logback-core:1.0.6',
'org.slf4j:slf4j-api:1.6.0',
'junit:junit:4.+'
)
}
après je lance : gradle construire
de la création du dossier de création, et je lance le pot dans build/libs/XXX.jar:
java-jar build/libs/XXX.jar
ici est une exécution dit :
Exception in thread "main" java.lang.NoClassDefFoundError: ch/qos/logback/core/joran/spi/JoranException
comment puis-je exécuter avec les bibliothèques de référence?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez la réaliser avec Gradle application plugin
J'espère que cela aide quelqu'un (que j'ai malheureusement passé assez de temps à essayer de trouver la solution). Voici la solution qui a fonctionné pour moi pour la création d'un exécutable JAR. Je suis d'incorporation Jetée dans la méthode main, Jetée 9 pour être précis et à l'aide de Gradle 2.1.
Inclure le code suivant dans votre build.gradle fichier (si un sous-projet est le "principal" du projet que le pot doit être construit à partir de, puis l'ajouter à la sous-projet qui devrait démarrer comme ce projet(':') { insérer le code quelque part ici, après dépendances.}.
Aussi, vous devez ajouter le plugin java pour que cela fonctionne: appliquer le plugin: "java".
Mon pot tâche se présente comme suit:
Et ensuite, vous pouvez exécuter votre yourjar.jar via la ligne de commande:
Le META-INF/.RSA, META-INF/.SF et META-INF/*.DSA être exclus pour qu'il fonctionne. Sinon, une SecurityException est lancée.
Le problème semble résider avec Jetty embarqué, comme Jetée déménagé à Eclipse et est maintenant à la signature de leurs Pots, que j'ai lu devient problématique quand d'autres, non signé Pots que vous souhaitez charger le signé une. N'hésitez pas à éduquer moi si je me trompe en cela, c'est juste ce que j'ai lu.
Les Pots dont dépendent les projets sont définis dans les dépendances comme suit:
EDIT: Avant, au lieu de simplement
j'avais
Cela a provoqué un comportement étrange dans un projet plus vaste dans construction propre. Lors de l'exécution du pot après l'exécution de gradle nettoyer construire pour la première fois (après un nettoyage manuel de la répertoire de construction), il serait jeter un NoClassDefFoundException (dans notre projet avec de nombreux sous-projets), mais l'exécution du pot après l'exécution de gradle nettoyer construire un deuxième temps (sans vider le répertoire de construction manuellement), pour une raison quelconque, il avait toutes les dépendances. Ce n'est pas arrivé si asFileTree.fichiers a été laissé de côté.
Aussi je tiens à souligner, toutes les dépendances de compilation sont inclus dans l'exécution, cependant pas tous d'exécution sont inclus dans la compilation. Donc, si vous êtes juste en utilisant la compilation
Alors assurez-vous de se rappeler que si il y a un NoClassDefFoundException jeté, une classe n'a pas été trouvé lors de l'exécution, ce qui signifie que vous devrait également inclure ce:
Réponse rapide
Ajouter les éléments suivants à votre
build.gradle
:gradle installDist
java -jar build/install/<appname>/lib/<appname>.jar
Je recommande l'ajout de la version de l'application pour votre
build.gradle
ainsi, mais il n'est pas nécessaire. Si vous le faites, le construit jar nom sera<appname>-<version>.jar
.Note: je suis en utilisant gradle 2.5
Détails
Afin de créer un autonome exécutable jar que vous pouvez simplement utiliser avec:
vous aurez besoin de:
Comme certains autres réponses point, vous pouvez utiliser certains tiers plugin pour y parvenir, comme l' l'ombre ou un bocal.
J'ai essayé de l'ombre, mais n'aimait pas le fait que tous mes dépendances et de leurs ressources ont été sous-évaluées à plat dans le construit pot avec mon code d'application. Je préfère aussi de minimiser l'utilisation de plugins externes.
Une autre option serait d'utiliser la gradle application plugin comme @erdi répondu ci-dessus. L'exécution de
gradle build
va construire un pot pour vous, et bien le bundle avec tous vos dépendances dans un fichier zip/tar. Vous pouvez aussi exécutergradle installDist
de sauter zip.Cependant, comme @jeremyjjbrown a écrit dans un commentaire, le plugin ne pas créer un exécutable jar en soi. Il crée un bocal et un script qui construit le chemin de la classe et exécute une commande pour exécuter la classe principale de votre application. Vous ne serez pas en mesure d'exécuter
java -jar appname.jar
.Pour obtenir le meilleur des deux mondes, suivez les étapes ci-dessus qui créer votre bocal avec tous vos dépendances comme des pots séparés et ajouter les valeurs correctes pour votre MANIEST.
Toutes ces réponses sont fausses ou obsolètes.
L'OP demande ce qui est connu comme un "gros bocal". C'est un exécutable jar qui contient toutes les dépendances de sorte qu'il ne nécessite pas de l'extérieur dépendances afin d'exécuter (sauf pour un JRE bien sûr!).
La réponse au moment de la rédaction est le Gradle Ombre Jar du plugin, a expliqué assez clairement à L'ombre Plugin Guide de l'Utilisateur & Exemples.
J'ai un peu de mal. Mais cela fonctionne:
mettre toutes ces lignes quelque part dans votre construction.gradle fichier (je les ai mis près du sommet) :
PS ne vous inquiétez pas les autres "référentiels", "dépendance" ou "plugin" lignes d'ailleurs, dans votre fichier de build, et ne laisser les lignes donc à l'intérieur de cette "buildscript de bloc" (je n'ai pas la moindre idée de pourquoi vous avez besoin de le faire).
PPS l'Ombre Plugin Guide de l'Utilisateur & Exemples est bien écrit, mais ne vous dit pas
pour inclure la ligne
où je l'ai mis ci-dessus. Peut-être parce que l'auteur suppose que vous êtes de moins en moins naïf que je suis, et vous êtes probablement. Je n'ai pas la moindre idée de pourquoi on nous dit de mettre un étrange "Class-Path" attribut comme ça, mais si ce n'est pas cassé, ne le répare pas.
Quand vous allez ensuite
Gradle sera, nous l'espérons construire une graisse exécutable jar sous /construire/libs (nom par défaut "shadow.jar") que vous pouvez courir en faisant ceci:
compile
dépendance des bocaux. De sorte que vous pouvez prendre ce pot et le mettre n'importe où et vontjava -jar myFatJar.jar
... et il sera exécuté. elanh dit la même chose dans un commentaire à sa question.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 :
1. Mention plugin:
2. Fournir la Buildscript:
3. Fournir la Classe Principale:
4. Créer le fatjar:
5. Exécutez le fatjar de /build/libs/: