用于执行Java自动导入的控制台命令

exe*_*ook 7 java autocomplete notepad++ console-application

我使用记事本在Java中开发.我对开发周期非常满意,但是我缺少像Eclipse和其他大型IDE那样的自动导入功能.我的猜测是:如果Eclipse这样做,那么有一个外部工具可以做到这一点.

我可以安装这样的工具并从命令行使用它吗?

例如,我有这个源代码:

public class Test extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final TextView tv = new TextView(this);
        tv.setText("Hello World!");
        setContentView(tv);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想运行这样的实用程序:

jautoimp Test.java
Run Code Online (Sandbox Code Playgroud)

得到这个输出:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
Run Code Online (Sandbox Code Playgroud)

win*_*ird 5

更新: serv-inc已创建此程序的一个版本,可自动确定您需要导入的类(而不必自己手动指定它们).

用法: ./javimp.py <java-src-file> [<java-src-file> ...]

仅支持插入模式(意味着文件本身将被更改).这个工具可能更接近大多数想要命令行自动导入工具的人正在寻找的东西.


我今天也在寻找同样的东西,但我没有找到它.但是,我今天花了很多时间制作一个Python脚本,具有类似功能.

javimp.py通过CLI工作.有几种不同的模式,但在您的情况下,该-i选项可能是您想要的.

python javimp.py -i YourJavaFile.java
Run Code Online (Sandbox Code Playgroud)

运行此命令将使javimp.py通过YourJavaFile.java查找以"import"开头的行.当找到一个时,它将尝试将该行的其余部分与Web抓取创建的Java类数据库中的条目的末尾进行匹配,如果找到匹配,则将其替换为import full.package.to.WhateverClassYouHadImported;.它还将说明缺少(或甚至太多)分号.

在您的示例中,这将是:

// Note that you still need to import the classes, but
// you don't need to remember the packages in your head
// anymore

import Activity; // -> import android.app.Activity;
import Bundle;   // -> import android.os.Bundle;
import TextView; // -> import android.widget.TextView;

public class Test extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final TextView tv = new TextView(this);
        tv.setText("Hello World!");
        setContentView(tv);
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法并不完美 - 值得注意的是,如果数据库中有两个具有相同名称的类,则可能会得到错误的匹配,并且还需要一个涵盖所有开发领域的最新数据库.但是,只要你不太相信它,它可能是一个有用的工具.您还可以编辑源代码,将Web抓取扩展到其他网页,而不是我在快速混合解决方案中指定的网页.开箱即用,它应该支持Java标准库和Android API,截至2016/06/20.

请记住,如果您尚未从文件系统中的任何位置访问javimp.py,则仍需要指定它的路径,如果您从其所在的目录以外的位置运行它.就个人而言,我通过向编辑器添加一个命令来规避绝对路径,从而绕过了这个命令.你可能会做类似的事情.


Tho*_*sen 1

现代 IDE 可以自动完成的主要原因是它们对您的完整项目有深入的了解。即使没有单独的编译步骤,良好的自动完成功能也能发挥作用。

这意味着编辑器和编译器非常好的朋友,以便编译器在编辑文件时处理文件(而不是编译所有内容),并且编辑器知道编译器从源代码中派生出什么。

在 Unix 世界中,这通常称为 TAGS,有两种方言 - 一种用于 vi,一种用于 emacs。我认为最好的选择是切换到这些编辑器之一,然后根据需要手动生成 TAGS 文件。有人曾尝试在 Emacs(Java EE 项目)中编写更完整的 Java 编程环境,但 Eclipse 终止了这一计划,因为它无法进行重构。

请注意,您要求的功能实际上是 IDE 的特性之一。您可能需要考虑是否已准备好使用更多 IDE 功能,而不仅仅是自动完成功能。