Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
执行Java自动导入的控制台命令_Java_Autocomplete_Console Application_Notepad++ - Fatal编程技术网

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

执行Java自动导入的控制台命令,java,autocomplete,console-application,notepad++,Java,Autocomplete,Console Application,Notepad++,我使用记事本用Java开发。 我对开发周期非常满意,但是我缺少像Eclipse和其他大型IDE那样的自动导入功能。 我的猜测是:如果Eclipse做到了这一点,那么有一个外部工具可以做到这一点 我可以安装这样的工具并从命令行使用它吗 例如,我有以下源代码: public class Test extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super

我使用记事本用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);
    }
}
我想运行这样的实用程序:

jautoimp Test.java
并获得以下输出:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

现代IDE能够自动完成的主要原因是,它们对您的整个项目非常熟悉。即使没有单独的编译步骤,一个好的自动完成也可以工作

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

在Unix世界中,这通常被称为标记,有两种方言——一种用于vi,另一种用于emacs。在我看来,您最好切换到这些编辑器之一,然后手动生成所需的标记文件。曾有人试图在Emacs(JavaEE项目)中编写一个更完整的Java编程环境,但Eclipse因为无法进行重构而扼杀了这一点

请注意,您要求的功能实际上是IDE的特征之一。您可能需要考虑是否准备好了更多的IDE特性而不是自动完成。<> >强>更新:已经创建了这个程序的版本,它自动确定您需要导入的类(而不是必须手动指定它们)。 用法:
/javimp.py[…]

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


我今天也在找同样的东西,但没找到。然而,我今天花了大部分时间制作了一个具有类似功能的Python脚本

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

python javimp.py -i YourJavaFile.java
运行此命令将使javimp.py遍历YourJavaFile.java,查找以“import”开头的行。当它找到一个匹配项时,它将尝试将该行的其余部分与通过web scraping创建的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);
    }
}
这种方法并不完美——值得注意的是,如果数据库中的某个地方有两个同名的类,那么可能会得到错误的匹配,而且它还需要一个覆盖所有开发领域的某种程度上最新的数据库。然而,只要你不太相信它,它可能是一个有用的工具。您还可以编辑源代码,将web抓取扩展到其他网页,而不是我在quick jumble together解决方案中指定的网页。从2016/06/20开始,它应该支持Java标准库和Android API


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

@winterwird的回答似乎不错。位于his的代码扩展为自动添加javac所需的导入。它缺少除
-i
之外的所有其他模式。你可以称之为

python javaimp.py JavaFile.java
或者,更新类列表,如
pythonjavimp.py
。您需要该文件,或者需要为当前类列表运行一次,或者还需要下载该文件

PS:生成的文件是

import android.widget.TextView;
import android.os.Bundle;
import android.app.Activity;
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);
    }
}

为什么不使用像这样的IDE呢?我不使用Eclipse是因为我不喜欢它。我喜欢记事本和命令行工具。不可能称之为CLI工具,但这也是一个强大的解决方案。@GregPrisament:下面有两种可能性