web-dev-qa-db-fra.com

eclipse: comment déboguer un programme Java en tant que fichier .jar?

J'utilise ant pour créer des fichiers .jar dans Eclipse. Fonctionne très bien.

J'ai un fichier .jar sur lequel je travaille qui s'attend à ce que le code se trouve dans un fichier .jar (il recherche les fichiers .properties dans le même répertoire que le fichier .jar) - Eclipse standard "Run" et "Debug" les menus exécutent la méthode main() d'une classe Java classe Java spécifiée ... mais ils le font à partir du répertoire contenant les fichiers de classe compilés, pas un fichier jar. Existe-t-il un moyen modifier ce comportement afin qu'Eclipse exécute du code à partir du fichier .jar approprié?

(Ma solution de contournement consiste à exécuter le fichier .jar en externe, suspendu en attendant un débogueur, par réponse de Dave Ray à l'une de mes autres questions .)

32
Jason S

Oui, vous pouvez créer un "Run Configuration" Personnalisé:
C'est-à-dire un "Java Application", Avec:

  • Classpath tab vidé de son contenu par défaut (le répertoire .class) et avec le pot ajouté
  • Source tab avec son contenu par défaut (doit référencer le répertoire src du projet)

Une telle configuration peut être exécutée ou déboguée.

http://www.kermeta.org/docs/html.chunked/KerMeta-UI-UserGuide/KerMeta-UI-UserGuide_figures/KerMeta_RunCommandLine_classpath.png

(Exemple de configuration personnalisée avec des jars comme entrées utilisateur)

30
VonC

Vous pouvez utiliser le débogage à distance en exécutant votre jar comme ceci

Java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -jar yourJar.jar

Et puis vous connecter depuis votre IDE à ce port

63
IonSpin

Je viens de trouver le lien suivant, qui décrit toute la procédure afin de déboguer un pot Java à distance.

Débogage Java applications à distance avec Eclipse

Les parties principales sont:

Cible VM agit comme serveur de débogage

Java -Xdebug -Xrunjdwp: transport = dt_socket, server = y, address = "8000" -jar test.jar

Cible VM agit comme client de débogage

Java -Xdebug -Xrunjdwp: transport = dt_socket, address = 127.0.0.1: 8000, suspend = y -jar test.jar

En fonction de la façon dont vous exécutez la machine virtuelle cible, le client ou le serveur, vous devez configurer Eclipse différemment.

Configuration Eclipse si vous démarrez le VM cible en tant que client

enter image description here

Configuration Eclipse si vous démarrez le VM cible en tant que serveur

enter image description here

L'article donne également une introduction en douceur au sujet.

6
Alessandro Giusa