如何在打包类时使用vim编译Java

时间:2012-12-11 14:38:04

标签: java macos vim

假设打包了Java类,这里是文件目录:

~/proj/bin/com/example/package/foo.class
~/proj/bin/com/example/package/foo1.class
~/proj/src/com/example/package/foo.java
~/proj/src/com/example/package/foo1.java

类foo需要使用类foo1。在终端中,这是我可以编译的方式

cd ~/proj/bin
javac -d ./ ../src/com/example/package/foo.java

(我已设置$CLASSPATH = "~/proj/bin"。这似乎只有在我们cd到~/proj/bin时才有效。)

现在使用vim(我在Mac上使用带有spf13-vim分布的vim插件的MacVim)。当vim保存.java文件时,它会自动使用javac进行编译。但是,vim将当前文件夹视为~/proj/bin/com/example/package/,而不是~/proj/bin。因此,只要它使用来自foo1的类,它就会在foo.java中显示错误。

如何在打包java类时保存时自动编译java?

4 个答案:

答案 0 :(得分:2)

不要忘记Vim是一个通用的文本编辑器。虽然您选择的发行版提供的插件提供了快速编译单个文件的功能,但是一旦您升级到更大的项目,请选择适合该作业的工具(例如正确处理依赖项)。

由于这是Java,因此可以使用大量工具: Ant Maven 等标准构建工具提供了您需要的项目编译的所有功能,以及可以通过:make在Vim内触发。或者,如果您的项目变得更大,那么切换到功能齐全的IDE(如 Eclipse NetBeans IntelliJ IDEA )可能是有意义的从优越的代码导航和调试功能中获益。 (你仍然可以在它们下面使用Ant或Maven,并在Vim中同时编辑文件。)

答案 1 :(得分:0)

我最近遇到了类似的问题,所以这就是我所做的:

我没有让Vim在保存时自动编译Java,而是编写了一个完全符合我想要的编译的脚本,然后在我的vimrc中映射了一个按键,以便随时运行该编译脚本。

所以例如这里是脚本的一部分(我在Windows 7机器上,但它不应该太难以适应)

set projectcp=..\classes;..\classes\lib\jackcess-1.2.7.jar;..\classes\lib\commons-logging.jar;..\classes\lib\commons-lang-2.0.jar;..\classes\lib\mail.jar
set compiledir=..\classes

echo Compiling authentication\LDAP_Authenticator.java ...
javac -d %compiledir% authentication\LDAP_Authenticator.java

echo Compiling data\ProgramData.java ...
javac -d %compiledir% data\ProgramData.java

echo Compiling data\Serializer.java ...
javac -cp %projectcp% -d %compiledir% data\Serializer.java

echo Compiling data\EmailEntry.java ...
javac -cp %projectcp% -d %compiledir% data\EmailEntry.java

在我的vimrc中,我有这行自动保存当前文件,然后每次按rr运行我的编译脚本

nnoremap <leader>rr :w<cr>:!compile-and-run.bat<cr>


虽然你的是:

nnoremap <leader>rr :w<cr>:!PATH/TO/SCRIPT.sh<cr>


或者也许在mac上你必须要做

nnoremap <leader>rr :w<cr>:!bash PATH/TO/SCRIPT.sh<cr>

答案 2 :(得分:0)

与其他人一样,我建议使用真正的构建工具而不是vim hacks。 Maven的一个不错的替代方法是sbt(示例使用Scala,但它也适用于Java),这需要较少的设置 - 不需要POM文件或类似的东西,除非您真的想要从Maven仓库中提取依赖项。

设置完所有内容后,您可以启动sbt,键入~ compile并在检测到文件更改时重建项目。 (同样,只要文件发生变化,您就可以使用~ test重建并运行所有测试。)

答案 3 :(得分:0)

我只是偶然找到解决方案。由于我在Mac OS X中使用带有图形界面的MacVim,我在finder中打开文件夹~/proj/src/com/example/package/,然后双击打开文件foo.java。 vim认为我们在~/proj/src/com/example/package/

要使“保存时编译”工作,只需使用vim中的命令:cd ~/proj/bin来通知vim执行所有操作,就像我们在~/proj/bin中一样。现在它正常运作!

顺便说一下,我安装了spf13-vimrc。