2016-03-21 2 views
1

Когда я запускаю java-программу из идеи Intellij, я заметил, что они выполняются через отражение классом AppMain (from idea_rt.jar).Запуск классов Java без использования класса AppMain в Intellij

IntelliJ продукта Спецификация:

IntelliJ IDEA (Community Edition) IC-145.184.1 Сложение # IC-145,184, построен на 1 марта 2016 года JRE: 1.8.0_60-b27 x86

Для Например: если я выполнить ниже код,

public class Example{ 


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

ниже приводится выход, в котором есть 5 внутренних вызовов от AppMain

Исключение в потоке "основного" java.lang.RuntimeException на Example.main (Example.java:12) при > sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) при sun.reflect. 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)

Как вы можете видеть выше всю информацию трассировки стека имеет 5 дополнительные трассировки стека информация зарождение из класса AppMain из idea_rt.jar

Есть в любом случае для запуска Java Applcation от IntelliJ IDE без использования AppMain?

+0

Зачем вам все это? Вы всегда можете запускать его как автономный с помощью JRE. Но так как вы используете IDEA, почему бы вам даже удивляться, что это тот, который запускает ваше приложение? Вы пытаетесь минимизировать использование стека или что (и если да, то по какой причине)? – Kayaman

+0

Я сохраняю трассировку стека в своем приложении, каждый раз, когда я беру трассировку стека, это дало бы мне лишние 5 строк, которые раздражают .. либо мне нужно вручную пропустить их (что связывает код только с одной IDE и позже удалите этот код).Поэтому мне нужен способ не запускать Java-приложение в IDEA без использования AppMain Итак, обратите внимание: когда я просто запускаю приложение с конфигурацией Debug, дополнительная информация не отображается. – chebus

+1

Почему бы просто не осмотреть стек и сохранить только кадры, начиная с 'Example.main()'? Ваш подход к этой «проблеме» довольно плох, если вы попытаетесь решить его через IDE. – Kayaman

ответ

3

Существует несколько способов достижения этого. Если вы используете gradle, вы можете следовать инструкциям в ответах здесь: gradle run, или если вы используете maven, вы можете найти ответы здесь: maven run. После того, как вы настроили решение maven или gradle, вы можете запустить его из окна инструмента, связанного с инструментом сборки, который вы используете, или вы можете использовать одно и то же окно, чтобы назначить комбинацию клавиш для задачи запуска.

Эти решения полезны, поскольку они создают для вас путь к классам. Если вы захотите каким-то образом сконструировать его вручную (возможно, скопировав его из окна запуска, когда вы попросите IntelliJ запустить этот метод для вас), вы можете написать свой собственный сценарий оболочки и попросить IntelliJ запустить его либо добавив его к вашему пути в некотором роде и набрав его имя в окне инструмента оболочки или добавив новую конфигурацию запуска «Приложение», которая ссылается на скрипт.

Однако предыдущие комментарии по-прежнему верны - вы не должны этого делать. Я предполагаю, что в том, что вы считаете производством, вы не будете запускать приложение из intellij? Таким образом, это не проблема производства, и это действительно беспокоит вас лично, и в этом случае вы должны игнорировать ее и лучше использовать свое время.

+2

Я согласен с вашими точками обзора. Просто я был «тесно связан» с IDEA IDE, что мысль, которая от него зависела, испугала меня :) Я согласен, что я не должен был потратить впустую в любое время, так как я работаю над выполнением программ отключение (отключение контрольных точек), которое, на удивление, не использует AppMain, а там связанные фреймы не отображаются в трассировке стека. или другой альтернативой я построил свои собственные аргументы VM, исключая AppMain, который выполняет программу напрямую с помощью java-инструмента. – chebus

+0

Также потерял несколько часов, избегая AppMain в качестве основного класса. Этого можно избежать в режиме отладки. Спасибо, что поделились этим с нами. –

Смежные вопросы