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

java.lang.VerifyError when using vaadin and vaadin-server

对于我正在从事的项目,它依赖于 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 进行了相同的测试,结果总是与上面相同。

maven POM 中没有将 vaadin 列为 vaadin-server 的依赖项(反之亦然)。我正在使用 JDK 版本 1.6.0_32。有谁知道这可能是什么原因造成的?

非常感谢。

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

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