繁体   English   中英

Java编译器正在使用旧版本的源代码

[英]Java compiler is using old version of source code

我遇到一个非常烦人的问题,假设我编译了文件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

谢谢阅读...

有包裹声明吗? 自第一次编译它以来,您可能已经放入了一个包声明。 如果您具有foo.bar软件包,则编译器将在foo / bar / FooBar.class中创建.class文件,并且应使用java foo.bar.FooBar运行它。 如果没有包,它将创建./FooBar.class并通过java FooBar运行它。

问题不会被缓存。 尝试这个:

  1. 查看您的FooBar.class文件上的时间戳(这是RUN)
  2. 再次编译javac ...
  3. 再看一下时间戳记。 它改变了吗? 如果没有,则您正在编译到ese的某个地方。
  4. 其他海报者对该包装的评论将解释这一点。 也可以通过设置/更改类路径来解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM