我有一个简单的java项目,我使用ant来构建。它有以下两类:用ant重新编译会导致代码在运行时崩溃?
A.java:
public class A {
public static void main(String[] args) {
Integer i = 0;
B.f(i);
}
}
B.java:
public class B {
public static void f(int i) {
System.out.println("hello");
}
}
工作正常:现在
,如果我改变了int
参数B.f
至Object
:
public class B {
public static void f(Object i) {
System.out.println("hello");
}
}
...代码重新编译罚款...
$ ant compile
[...]
$ java -cp bin A
Exception in thread "main" java.lang.NoSuchMethodError: B.f(I)V
at A.main(Unknown Source)
...但它崩溃在运行时。为什么?在编译之前
文件夹结构:
bin
build.xml
src
├── A.java
└── B.java
的build.xml:
<project>
<target name="compile">
<javac srcdir="src" destdir="bin"/>
</target>
</project>
这听起来很可疑。这意味着蚂蚁的重新编译策略几乎是无用的,你也可以在每次编译时删除所有的类。尽管如此,不应该使用新的'B',因为参数是兼容的吗? – Dog
@Dog,我可能是错的,但你是否尝试删除类文件并运行你的ant构建? – Lucas
@狗,这里是另一个参考:http://stackoverflow.com/a/2590705/516433 – Lucas