我遇到了一个非常烦人的问题,想象一下我编译文件FooBar.java:
$ javac FooBar.java
它成功编译,然后像往常一样运行它:
$ java FooBar< in.txt
我得到了预期的输出,交易是,如果我更改源代码(FooBar.java)打印别的东西并再次编译它我得到的第一次相同的输出!
这真让我疯了...... javac有没有缓存?即使我删除了FooBar.class并重新编译,我也得到了早期源代码的输出。我找到解决这个问题的唯一方法是删除FooBar.java并创建一个具有不同名称的新文件(我只是复制粘贴代码),这是有效的。
这个错误(?)真的让我烦恼。我已经搜索了解决方案或解释为什么会发生这种情况但没有运气。
这似乎与我的问题有关,但并不完全,因为我没有使用任何IDE,并且Classpath指向我的工作文件夹: http://www.coderanch.com/t/519372/java/java/Executing-Old-Code
我想找出导致这种情况的原因,因为我每次更新源代码时都不想创建新文件...我在Windows上使用Java 1.6.0_27
感谢阅读...
答案 0 :(得分:1)
是否有包装声明?自从您第一次编译它以来,您可能已经放入了包声明。如果你有包foo.bar,编译器将在foo / bar / FooBar.class中创建.class文件,你应该用java foo.bar.FooBar
运行它。如果没有包,它将创建./FooBar.class并通过java FooBar
运行它。
答案 1 :(得分:0)
问题不在于缓存。试试这个: