运行 java class 在 Intellij 中没有使用 AppMain class

Run java classes without using AppMain class in Intellij

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

IntelliJ 产品规格:

IntelliJ IDEA (Community Edition) IC-145.184.1 Build #IC-145.184, built on March 1, 2016 JRE: 1.8.0_60-b27 x86

例如:如果我执行下面的代码,

public class Example{


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

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

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

正如您在上面看到的,堆栈跟踪信息有 5 个额外的堆栈跟踪信息源自 AppMain class 来自 idea_rt.jar

有没有 运行 Java 不使用 AppMain 的来自 IntelliJ IDE 的应用程序?

有几种方法可以实现这一点。如果您使用的是 gradle,则可以按照此处答案中的说明进行操作:gradle run, or if you're using maven you can follow the answers here: maven run。一旦您配置了 maven 或 gradle 解决方案,您可以从与您正在使用的构建工具关联的工具 window 运行 它,或者您可以使用相同的 window 来为 运行 任务分配键盘快捷键。

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

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