假设打包了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?
答案 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
中一样。现在它正常运作!