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

时间:2015-09-16 12:24:59

标签: java intellij-idea preprocessor shebang

上下文

我经常使用Java launching 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中的检查,但基本的编译检查行为似乎不可配置(至少通过检查界面)。

1 个答案:

答案 0 :(得分:3)

由于某种原因,构建并运行的脚本是不可接受的吗?

#!/bin/bash

set -e

CLASSPATH="..."

javac -cp "$CLASSPATH" "$1"
java -cp "$CLASSPATH:." "$1"

这似乎并不比你链接到的shebang解决方案更糟糕(实际上更好,因为它显而易见且标准),因为它还依赖于外部文件。