如果我正在尝试运行一个 java 程序并且我不知道 Main 类的确切名称,有没有办法使用制表符完成来解决这个问题?
java -cp stackoverflow.jar org.<tab>
stackoverflow serverfault stackexchange
java -cp stackoverflow.jjar org.stackoverflow.<tab>
Main IntegrationTest QuestionAnswerConsole
类似的东西。
如果我正在尝试运行一个 java 程序并且我不知道 Main 类的确切名称,有没有办法使用制表符完成来解决这个问题?
java -cp stackoverflow.jar org.<tab>
stackoverflow serverfault stackexchange
java -cp stackoverflow.jjar org.stackoverflow.<tab>
Main IntegrationTest QuestionAnswerConsole
类似的东西。
基本上你在问如何配置 shell 自动竞争以支持 java。有可能的。看看这个讨论:bash tab completion 如何工作?
不得不说,这不仅是发现主类的好主意,也是完成其他命令行选项和类路径的好主意。如果您开发它,我很乐意使用这样的脚本。祝你好运。
编辑
至少在我的 Ubuntu 文件上less /usr/share/bash-completion/completions/java
存在,因此应该可以完成一些工作。随时欢迎您改进脚本。
获得您正在谈论的 Tab Completion 的唯一方法是使用“Java 感知”的 shell 或为java
命令提供此功能的 shell 脚本。git
有类似的功能,所以我认为这不是完全不可能的。
编辑:
根据SU 上的这个问题,可以为 bash shell 创建一个自动完成脚本。由于 SU 上的问题与您所问的略有不同,因此我看不到很多与此问题相关的具体细节。但是,它看起来是一个不错的起点。
如果类名隐藏在 jar 文件中,我不知道有什么简单的方法可以自动完成类名。
另一方面,您可以在您的 jar 中添加一个 Manifest 以使其可自动执行(即,您只需运行java -cp ... -jar stackoverflow.jar
)!
在 jar 存档中,添加一个META-INF
文件夹,并在该文件夹内创建一个MANIFEST.MF
文件,内容为:
Main-Class: org.stackoverflow.Main
(或者你的主要课程实际上是什么)。
这是一些文档:设置应用程序的入口点
其他答案建议您解决方案,但作为旁注,如果您提供 jar 文件的维护者提供带有路径的清单文件,则不需要它META-INF/MANIFEST.MF
。然后java
自动从清单中提取主类,您可以这样运行它:
java -jar stackoverflow.jar