1

当我从 Intellij idea 运行 java 程序时,我注意到它们是由一个名为 AppMain 的类(来自 idea_rt.jar)通过反射执行的。

IntelliJ 产品规格:

IntelliJ IDEA(社区版)IC-145.184.1 Build #IC-145.184,于 2016 年 3 月 1 日构建 JRE:1.8.0_60-b27 x86

例如:如果我执行以下代码,

public class Example{


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

以下是来自 AppMain 的 5 个内部调用的输出

位于 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 处 > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 处的 Example.main(Example.java:12) 处的线程“main”java.lang.RuntimeException 中的异常 在 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 个额外的堆栈跟踪信息,这些信息来自idea_rt.jar 的 AppMain 类

无论如何在不使用 AppMain 的情况下从 IntelliJ IDE 运行 Java Applcation 吗?

4

1 回答 1

3

有几种方法可以实现这一目标。如果您使用的是 gradle,则可以按照此处答案中的说明进行操作:gradle run,或者如果您使用的是 maven,则可以按照此处的答案进行操作:maven run。配置 maven 或 gradle 解决方案后,您可以从与您正在使用的构建工具关联的工具窗口运行它,或者您可以使用同一窗口为运行任务分配键盘快捷键。

这些解决方案很有帮助,因为它们为您构建了类路径。如果您愿意以某种方式手动构建它(也许通过在您要求 IntelliJ 为您运行该方法时从运行窗口复制它),那么您可以编写自己的 shell 脚本并要求 IntelliJ 运行它,或者通过以某种方式将其添加到您的路径并在 shell 工具窗口中键入其名称,或者通过添加引用该脚本的新“应用程序”运行配置。

但是,早期的评论仍然是正确的——你不应该这样做。我假设在您考虑生产的任何情况下,您都不会从 intellij 运行应用程序?所以,这不是生产问题,它只是真正困扰您个人,在这种情况下,您应该忽略它并更好地利用您的时间。

于 2016-03-21T13:52:43.483 回答