如何在 GWT 中使用 JsInterop

How to use JsInterop in GWT

我正在玩 Gwt,想试试 JsInterop。

我定义了一个用@JsType 注释的简单POJO。 Idea 在项目中看到注释类型,但构建失败并显示注释 class 未定义的错误。

GWT 版本 2.8.1。 GWT maven 插件是 gwt-maven-plugin 1.0-rc-8.

编译器选项是:

  <compilerArgs>
     <compileArg>-XjsInteropMode</compileArg>
     <compileArg>-generateJsInteropExports</compileArg>
     <compileArg>JS</compileArg>
  </compilerArgs> 


[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /home/egnyte/demo/gwt/StockWatcherSample-master/src/main/java/de/google/gwt/stockwatcher/client/sub/Mesage.java:[5,37] package com.google.gwt.core.client.js does not exist
[ERROR] /home/egnyte/demo/gwt/StockWatcherSample-master/src/main/java/de/google/gwt/stockwatcher/client/sub/Mesage.java:[7,2] cannot find symbol
  symbol: class JsType
[INFO] 2 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.119 s
[INFO] Finished at: 2017-10-06T16:09:52+02:00
[INFO] Final Memory: 21M/258M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project stockwatcher: Compilation failure: Compilation failure:
[ERROR] /home/egnyte/demo/gwt/StockWatcherSample-master/src/main/java/de/google/gwt/stockwatcher/client/sub/Mesage.java:[5,37] package com.google.gwt.core.client.js does not exist
[ERROR] /home/egnyte/demo/gwt/StockWatcherSample-master/src/main/java/de/google/gwt/stockwatcher/client/sub/Mesage.java:[7,2] cannot find symbol
[ERROR] symbol: class JsType

您的 @JsType 导入错误。应该是

import jsinterop.annotations.JsType;

如果这不起作用,请确保您的依赖项中确实有 jsinterop-annotations 版本 1.0.1。

如果您看到的是旧注释,那么除了 GWT 2.8 之外,您还使用了 GWT 2.7 或更早版本 - 混合版本绝不是个好主意。