【问题标题】:Java main class autocompleteJava 主类自动完成
【发布时间】:2013-07-24 13:32:35
【问题描述】:

如果我正在尝试运行一个 java 程序并且我不知道 Main 类的确切名称,有没有办法使用 tab 补全来解决这个问题?

java -cp stackoverflow.jar org.<tab>
stackoverflow serverfault stackexchange

java -cp stackoverflow.jjar org.stackoverflow.<tab>
Main IntegrationTest QuestionAnswerConsole

类似的东西。

【问题讨论】:

    标签: java shell command-line autocomplete


    【解决方案1】:

    其他答案建议您解决方案,但作为旁注,如果您提供 jar 文件的维护者提供路径为 META-INF/MANIFEST.MF 的清单文件,则不需要它。然后java自动从manifest中提取主类,你可以这样运行:

    java -jar stackoverflow.jar

    【讨论】:

    • 仅当存在 Java 主类的清单条目时。否则我们应该通过Java反编译器找出或向提供者询问执行指令。
    • 一个 jar 中也可以有多个主要方法。
    • 如果我们通过反编译找到更多的主要方法,那么我们应该从Provider中找到正确的类来使用
    • @ArtemShnayder 是的。但是,AFAIK,JAR 清单文件中只能有一个 Main-Class 条目。
    【解决方案2】:

    如果类名隐藏在 jar 文件中,我不知道有什么简单的方法可以自动完成类名。

    另一方面,您可以在 jar 中添加 Manifest 以使其自动执行(即,您只需运行 java -cp ... -jar stackoverflow.jar)!

    在 jar 存档中,添加一个 META-INF 文件夹,然后在该文件夹中创建一个 MANIFEST.MF 文件,内容如下:

    Main-Class: org.stackoverflow.Main
    

    (或任何你的主要课程)。

    这里有一些文档:Setting an application's Entrypoint

    【讨论】:

      【解决方案3】:

      获得您所说的 Tab Completion 的唯一方法是使用“Java 感知”的 shell 或为 java 命令提供此功能的 shell 脚本。 git 有类似的功能,所以我认为这不是完全不可能的。

      编辑:

      根据this question on SU,可以为 bash shell 创建一个自动完成脚本。由于 SU 上的问题与您所问的略有不同,因此我看不到很多与此问题相关的具体细节。不过,这似乎是一个不错的起点。

      【讨论】:

        【解决方案4】:

        基本上,您是在问如何配置 shell 自动竞争以支持 java。有可能的。看看这个讨论:How does bash tab completion work?

        我不得不说,这不仅是发现主类的好主意,也是完成其他命令行选项和类路径的好主意。如果您开发它,我很乐意使用这样的脚本。祝你好运。

        编辑

        至少在我的 Ubuntu 文件 less /usr/share/bash-completion/completions/java 上存在,因此应该可以完成一些工作。随时欢迎您改进脚本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-22
          • 1970-01-01
          • 1970-01-01
          • 2013-03-07
          • 2021-11-13
          • 2013-07-05
          • 2011-10-10
          • 2012-02-15
          相关资源
          最近更新 更多