3

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

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

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

类似的东西。

4

4 回答 4

3

基本上你在问如何配置 shell 自动竞争以支持 java。有可能的。看看这个讨论:bash tab completion 如何工作?

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

编辑

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

于 2013-07-24T21:12:31.167 回答
1

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

编辑:

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

于 2013-07-24T21:12:00.563 回答
0

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

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

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

Main-Class: org.stackoverflow.Main

(或者你的主要课程实际上是什么)。

这是一些文档:设置应用程序的入口点

于 2013-07-24T21:10:54.203 回答
0

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

java -jar stackoverflow.jar

于 2013-07-24T21:05:27.317 回答