使用vaadin和vaadin-server时的java.lang.VerifyError

时间:2015-02-03 18:23:04

标签: java vaadin vaadin7 verifyerror

对于我正在处理的项目,这取决于vaadin-6.8.12,我想使用vaadin-server-7.0.6 JAR中包含的Page / JavaScript类。

但是,当我包含vaadin-server时,我在尝试使用Page.getCurrent()方法时会得到一个java.lang.VerifyError。

为了说明这一点,我写了一个小的测试程序,它表现出相同的行为:

import com.vaadin.server.Page;

public class Main
{
    public static void main(String[] args)
    {
            Page page = Page.getCurrent();
            System.out.println(page);
    }
}

我在文件中设置了类路径(JAR文件和Main.class在同一个文件夹中):

vaadin-6.8.12.jar:vaadin-server-7.0.6.jar:vaadin-shared-7.0.6.jar:vaadin-
shared-deps-1.0.2.jar:vaadin-theme-compiler-7.0.6.jar

然后运行这样的程序:

java -cp $(cat vaadin.classpath):. Main

运行时,我收到以下错误:

Exception in thread "main" java.lang.VerifyError: (class:
com/vaadin/server/Page, method: getJavaScript signature:
()Lcom/vaadin/ui/JavaScript;) Incompatible argument to function
at Main.main(Main.java:7)

但是,如果我颠倒了vaadin-6.8.12和vaadin-server-7.0.6的顺序,我就不会得到java.lang.VerifyError。

我为不同版本的vaadin和vaadin-server尝试了相同的测试,总是与上面的结果相同。

vaadin未在maven POM中列为vaadin-server的依赖关系(反之亦然)。我正在使用JDK版本1.6.0_32。有谁知道这可能导致什么?

非常感谢。

1 个答案:

答案 0 :(得分:2)

你不能用这种方式组合Vaadin 6和Vaadin 7。如果要使用Vaadin 7中的功能,则需要迁移整个应用程序以使用Vaadin 7.

如果你想从服务器端执行一些JavaScript,Vaadin 6有Window.executeJavaScript()方法你可以尝试使用。