2016-03-21 5 views
1
Wenn ich Java-Programm von Intellij Idee ausgeführt habe, bemerkte ich, dass sie über Reflexion von einer Klasse namens AppMain (von Idee_rt.jar) ausgeführt werden.

Ausführen von Java-Klassen ohne AppMain-Klasse in Intellij

IntelliJ Produktspezifikation:

IntelliJ IDEA (Community Edition) IC-145.184.1 Build # IC-145,184, am 1. März gebaut 2016 JRE: 1.8.0_60-b27 x86

Für Beispiel: wenn ich unter Code ausführen,

public class Example{ 


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

es folgt die Ausgabe, in der es 5 interne Anrufe von AppMain

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

Wie Sie vor allem der Stack Trace-Info hat 5 zusätzliche Stack-Trace Informationen Entstehung von AppMain Klasse von idea_rt.jar

Gibt es trotzdem zu Run Java applcation dem von IntelliJ IDE ohne AppMain sehen können?

+0

Warum kümmert es dich? Sie können es immer als eigenständiges Programm mit nur der JRE ausführen. Aber da Sie IDEA verwenden, warum in aller Welt würden Sie sich sogar wundern, dass es der ist, der Ihre Bewerbung beginnt? Versuchen Sie, die Stack-Nutzung zu minimieren oder was (und wenn ja, aus welchem ​​Grund)? – Kayaman

+0

Ich speichere die Stack-Trace in meiner Anwendung, jedes Mal, wenn ich den Stack-Trace nehme, würde es mir zusätzliche 5 Zeilen geben, was nervig ist ... entweder muss ich sie manuell überspringen (was den Code nur an eine IDE bindet und später) lösche diesen Code).Also ich brauche eine Möglichkeit, die Java-Anwendung in IDEA nicht ohne AppMain ausführen zu lassen. Nebenbei bemerkt: Wenn ich nur die Anwendung mit Debug-Konfiguration ausführen, dann wird die zusätzliche Information nicht angezeigt. – chebus

+1

Warum untersuchen Sie nicht einfach den Stacktrace und speichern nur die Frames ab 'Example.main()'? Ihr Ansatz zu diesem "Problem" ist ziemlich schlecht, wenn Sie versuchen, es über die IDE zu lösen. – Kayaman

Antwort

3

Es gibt mehrere Möglichkeiten, dies zu erreichen. Wenn Sie Gradle verwenden, können Sie den Anweisungen in den Antworten hier folgen: gradle run, oder wenn Sie maven verwenden, können Sie die Antworten hier folgen: maven run. Nachdem Sie die Maven- oder Gradle-Lösung konfiguriert haben, können Sie sie über das Werkzeugfenster ausführen, das dem von Ihnen verwendeten Erstellungswerkzeug zugeordnet ist, oder Sie können das gleiche Fenster verwenden, um der Ausführungsaufgabe eine Tastenkombination zuzuweisen.

Diese Lösungen sind hilfreich, da sie den Klassenpfad für Sie erstellen. Wenn Sie es manuell erstellen möchten (z. B. indem Sie es aus dem Ausführungsfenster kopieren, wenn Sie IntelliJ auffordern, die Methode für Sie auszuführen), könnten Sie ein eigenes Shell-Skript schreiben und IntelliJ bitten, das auszuführen, entweder durch Fügen Sie es Ihrem Pfad in irgendeiner Weise hinzu und geben Sie seinen Namen in das Shell-Tool-Fenster ein, oder fügen Sie eine neue "Application" -Run-Konfiguration hinzu, die auf das Skript verweist.

Allerdings sind die früheren Kommentare immer noch richtig - Sie sollten dies nicht tun. Ich gehe davon aus, dass Sie die App von intellij nicht ausführen, egal was Sie als Produktion betrachten. Das ist also kein Produktionsproblem und es stört Sie nur persönlich. In diesem Fall sollten Sie es ignorieren und Ihre Zeit besser nutzen.

+2

Ich stimme deinen Standpunkten zu. Es ist nur, dass ich mit IDEA IDE "eng gekoppelt" war, dass der Gedanke weg von ihm Angst hat :) Ich stimme zu, ich sollte keine Zeit verschwendet haben, so wie eine Arbeit um ich gerade die Programme ausführen durch Debugging (Breakpoints deaktivieren), das überraschenderweise nicht mit AppMain arbeitet und dort von verwandten Frames angezeigt wird, werden im Stack-Trace nicht angezeigt. oder durch eine andere Alternative habe ich meine eigenen VM-Argumente mit Ausnahme von AppMain, die Programm direkt von Java-Tool ausführt. – chebus

+0

Auch ein paar Stunden verloren AppMain als Hauptklasse zu vermeiden. Es ist im Debug-Modus vermieden. Danke, dass du es mit uns geteilt hast. –

Verwandte Themen