如何配置 IntelliJ IDEA 以允许 Java 文件中的 shebang

Zac*_*c B 5 java preprocessor shebang intellij-idea

语境:

我经常使用Java 启动 shebang来使我的 Java 源文件像脚本一样运行。我还经常直接从 IntelliJ IDEA 运行项目。我的许多 Java 文件都以#!/path/to/my/java/launcher.

我意识到这种做法在除了最基本的测试场景之外的所有场景中都是有问题的,但这就是我使用它的全部目的。

这很方便,因为当我不在 IDEA 中进行本地测试时,我经常在多个不同的服务器上运行测试。将 IDEA 指向不同的远程服务器以在其上运行代码很麻烦,而直接访问这些服务器(代码已经存在,因为它存储在网络共享上)并使用 运行文件./MyFile.java,或者指示其他人执行以下操作要容易得多相同的。

问题:

如果我在 IDEA 中有一个带有 Java shebang 的文件,它将无法编译。该#!行(以及文件的其余部分)被 IDE 检测为语法错误。

问题:

如何配置 IDEA 来处理包含技术上无效语法 shebang 的 Java 文件?

理想情况下,我能够告诉 IDEA“#!在语法检查/编译时忽略 .java 文件中第一个和开头的行”。但是,如果我可以配置一条“语法检查/编译时忽略所有 .java 文件的第一行”规则,我也会很高兴。

更根本地说:如何让 IDEA 支持(编译,认为有效)包含 -#!前缀第一行的 Java 文件?

我尝试过的:

  • 我尝试破解 IDEA 使用的调用javac以使用管道/匿名文件描述符并tail排除第一行;没有这样的运气。
  • 我尝试添加工件以在构建过程中删除第一行,但这似乎对语法验证问题没有帮助:即使在构建过程中删除了有问题的行,IDEA 也会认为整个文件语法无效,无法构建。
  • 我尝试使用注释来抑制错误,但是这些注释会阻止 shebang 出现在第一行,此时文件无法像脚本一样运行。
  • 我尝试过在 IDEA 中搞乱检查,但基本的编译检查行为似乎不可配置(至少通过检查界面)。

dim*_*414 3

构建并运行脚本是否因某种原因不可接受?

#!/bin/bash

set -e

CLASSPATH="..."

javac -cp "$CLASSPATH" "$1"
java -cp "$CLASSPATH:." "$1"
Run Code Online (Sandbox Code Playgroud)

这看起来并不比您链接到的 shebang 解决方案更糟糕(实际上更好,因为它是显而易见的和标准的),因为它也依赖于外部文件。