2016-03-21 1 views
1

Lorsque j'exécute un programme java à partir d'une idée d'Intellij, j'ai remarqué qu'ils sont exécutés par réflexion par une classe appelée AppMain (à partir de idea_rt.jar).Exécuter des classes java sans utiliser la classe AppMain dans Intellij

IntelliJ spécifications produit:

IntelliJ IDEA (Community Edition) IC-145.184.1 Build # IC-145,184, construit le 1er Mars, 2016 JRE: 1.8.0_60-b27 x86

Pour exemple: si j'exécute le code ci-dessous,

public class Example{ 


    public static void main(String[] args) { 
     throw new RuntimeException(); 
} 
} 

Voici le résultat dans lequel il y a 5 appels internes de AppMain

Exception à > sun.reflect.NativeMethodAccessorImpl.invoke0 (méthode native) à sun.reflect in thread "main" java.lang.RuntimeException à Example.main (Example.java:12). NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) à sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) à java.lang.reflect.Method.invoke (Method.java:497) à com.intellij .rt.execution.application.AppMain.main (AppMain.java:144)

Comme vous pouvez le voir ci-dessus toutes les informations de trace de la pile a 5 origine de l'information de trace de la pile supplémentaire de la classe AppMain de idea_rt.jar

est-il de toute façon à Java Run applcation de son IntelliJ IDE sans utiliser AppMain?

+0

Pourquoi vous en souciez-vous? Vous pouvez toujours le faire fonctionner seul avec le JRE. Mais puisque vous utilisez IDEA, pourquoi diable seriez-vous même surpris que ce soit celui qui commence votre application? Essayez-vous de minimiser l'utilisation de la pile ou quoi (et si oui, pour quelle raison)? – Kayaman

+0

Je stocke la trace de pile dans mon application, chaque fois que je prends la trace de la pile cela me donnerait 5 lignes supplémentaires ce qui est ennuyeux ... soit je dois les ignorer manuellement (qui lie le code à un seul IDE et plus tard effacez ce code).Donc, j'ai besoin d'un moyen de ne pas exécuter l'application Java dans IDEA sans utiliser AppMain Donc sur une note de côté: Lorsque je viens d'exécuter l'application avec la configuration de débogage, les informations supplémentaires ne sont pas affichées. – chebus

+1

Pourquoi ne pas simplement examiner la pile et sauvegarder seulement les images à partir de 'Example.main()'? Votre approche de ce "problème" est assez mauvaise si vous tentez de le résoudre via l'IDE. – Kayaman

Répondre

3

Il y a plusieurs façons d'y parvenir. Si vous utilisez gradle, vous pouvez suivre les instructions dans les réponses ici: gradle run, ou si vous utilisez maven, vous pouvez suivre les réponses ici: maven run. Une fois que vous avez configuré la solution maven ou gradle, vous pouvez l'exécuter depuis la fenêtre d'outils associée à l'outil de construction que vous utilisez, ou vous pouvez utiliser la même fenêtre pour affecter un raccourci clavier à la tâche d'exécution.

Ces solutions sont utiles car elles construisent le chemin de classe pour vous. Si vous êtes prêt à le construire manuellement d'une manière ou d'une autre (en le copiant depuis la fenêtre d'exécution lorsque vous demandez à IntelliJ d'exécuter la méthode), vous pouvez écrire votre propre script shell et demander à IntelliJ de le faire, soit l'ajouter à votre chemin d'une manière ou d'une autre et en tapant son nom dans la fenêtre de l'outil shell, ou en ajoutant une nouvelle configuration d'exécution 'Application' qui fait référence au script. Cependant, les commentaires précédents sont toujours corrects - vous ne devriez pas le faire. Je suppose que dans tout ce que vous considérez comme production, vous n'utiliserez pas l'application d'intellij? Donc, ce n'est pas un problème de production et cela ne vous dérange vraiment que personnellement, auquel cas vous devriez l'ignorer et faire un meilleur usage de votre temps.

+2

Je suis d'accord avec vos points de vue. C'est juste que j'étais "étroitement couplé" avec IDEA IDE que la pensée rester loin de moi m'a fait peur :) Je suis d'accord je ne devrais pas avoir perdu du temps, donc comme un travail autour je suis juste en train d'exécuter les programmes par débogage (désactiver les points d'arrêt) qui étonnamment n'utilise pas AppMain et là par les trames connexes ne sont pas affichés dans la trace de la pile. ou par une autre alternative j'ai construit mes propres arguments VM à l'exclusion de AppMain qui exécute le programme directement par l'outil Java. – chebus

+0

A également perdu quelques heures en évitant AppMain en tant que classe principale. Il est évité en mode débogage. Merci de partager ceci avec nous. –