7
votes

Est-il possible d'avoir un jar manifeste pour utiliser tous les bocaux dans un dossier

J'essaie de définir un manifeste de pot afin qu'il charge toutes les bibliothèques (pots) dans un dossier à côté du pot.

Le manifeste ressemble à ceci: xxx

La mise en page est la suivante: xxx

et j'essaie de courir comme ceci: xxx

et Je reçois des erreurs de noclassdéfinition sur les classes du bocal dans le dossier.

Si quelqu'un est curieux, ce dossier peut contenir des pots optionnels traités lors du chargement de la classe. Ça 'Swhy, je ne peux pas utiliser les codés ou autogénérées.

aucune idée?

Mise à jour Repéra la question comme cela n'est pas possible actuellement du manifeste lui-même. La réponse était la seule réellement viable sans avoir besoin d'extraire des pots, bien qu'elle fonctionne aussi.

Ainsi, comme un résumé La réponse est non, cela ne peut pas être effectué à partir du fichier manifeste seul si vous n'avez pas spécifié dépendances.


5 commentaires

La classe de classe d'Afik Jar commence à la racine du fichier jar . Vous ne pouvez pas mettre des cours ou des pots dans des sous-répertoires, à moins que vous ne les chargez de manière dynamique comme démarrage ou OSGI des conteneurs.


S'avère, cela peut être fait, vous devez spécifier un chemin avec le nom du jar. Vérifiez ce lien aujourd'huiguesswhat.blogspot.com / 2011/03 / ...


J'ai couru sur ce lien plus tôt et mon manifeste ci-dessus est basé sur cela, mais cela ne fonctionne pas. Il ne trouve que les fichiers de ce dossier défini dans la classe de classe. Le dossier seul ne semble pas fonctionner. (c'est-à-dire libs / ou ./libs/)


Selon le lien de la classe de classe :./libs/lib1.jar devrait fonctionner.


Oui, mais je ne connais pas les dépendances avant la main. Je voudrais utiliser tous les bocaux là-bas sans avoir besoin de savoir avant la main. Est pour un système de plug-in.


3 Réponses :


0
votes

Java ne connaît pas les fichiers JAR dans le répertoire LIBS. Si vous utilisez Java 1.6+, vous pouvez exécuter un programme comme

java -cp lib / * -jar myjar.jar


4 commentaires

N'a pas fonctionné comme écrit. Devait faire ceci: Java -CP libs / -jar myjar.jar. Malheureusement, ce n'est pas ce que j'ai demandé car j'essaye de voir si c'est possible du manifeste.


J'ai fini par utiliser une version de cela pour le faire fonctionner: java -cp libs / * chemin.to.my.class.main


Question mise à jour pour accueillir ceci comme seule réponse valide.


Java n'autorise pas les deux -cp et -jar drapeaux: Stackoverflow.com/questions/15930782/...



1
votes

Vous devez définir votre manifeste classpath comme xxx

Voir la documentation Oracle pour plus de détails https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html


3 commentaires

Cela ne fonctionne que si vous savez avoir avant de remettre les pots que le dossier aura. Ceci est destiné aux pots facultatifs que l'application détecte lorsqu'il est dans la classe de classe.


Avez-vous essayé de la classe de classe: libs / *. Jar?


Apparemment, l'entrée de parcours dans le fichier manifeste n'a pas pris en charge les caractères génériques



1
votes

Essayez d'extraire ces pots. On dirait que vous ne pouvez pas ajouter tous les bocaux du répertoire, mais vous pouvez ajouter toutes les classes. Vous perdez évidemment toute la configuration dans Manifest, cependant, si vous êtes intéressé par le contenu du code de pots, cela pourrait fonctionner.

J'ai testé avec ces classes simples p> xxx pré>

Maintenant, j'essaie de séparer les classes. Je les ai jetés dans p> xxx pré>

pas de chemin de classe dans n'importe quel manifeste. Je peux courir un avec java -cp libb.jar: liba.jar a code>. Maintenant, je crée un autre pot avec le jeu de parcours de classe sur lib / code> p> xxx pré>

mon arbre de répertoire ressemble à p> xxx Pré>

maintenant j'essaie JAR P>

$ java -jar empty.jar 
pkg.B


1 commentaires

Cela ne fonctionnera tout simplement pas pour mon scénario car les utilisateurs non techniques ne pourront pas le faire. Leur demandant de mettre des pots dans un répertoire est assez difficile. Merci