Gradle JsInterop“;“未定义com”;
正在尝试使用JsInterop根据Javascript与LibGDX项目通信。下面是“将Java类型导出到JavaScript”示例。它不起作用:未捕获引用错误“com”未定义。不过,我没有在Gradle JsInterop“;“未定义com”;,gradle,gwt,libgdx,gwt-jsinterop,Gradle,Gwt,Libgdx,Gwt Jsinterop,正在尝试使用JsInterop根据Javascript与LibGDX项目通信。下面是“将Java类型导出到JavaScript”示例。它不起作用:未捕获引用错误“com”未定义。不过,我没有在gradle中遇到任何错误 我已经: 已选中generateJsInteropExports是否已启用: My GdxDefinition.gwt.xml: <module rename-to="html"> <inherits name='com.badlogic.gdx.backe
gradle
中遇到任何错误
我已经:
My GdxDefinition.gwt.xml
:
<module rename-to="html">
<inherits name='com.badlogic.gdx.backends.gdx_backends_gwt' />
<inherits name='com.badlogic.gdx.physics.box2d.box2d-gwt' />
<inherits name='myapp' />
<entry-point class='com.mypackage.myapp.client.HtmlLauncher' />
<set-configuration-property name="gdx.assetpath" value="../android/assets" />
<set-configuration-property name='xsiframe.failIfScriptTag' value='FALSE'/>
<set-configuration-property name='generateJsInteropExports' value='true'/>
<set-property name="user.agent" value="safari"/>
</module>
我是这样编译的:
gradlew.bat html:dist --daemon -generateJsInteropExports=true
package com.mypackage.myapp.client;
import jsinterop.annotations.JsPackage;
import jsinterop.annotations.JsType;
@JsType(namespace = JsPackage.GLOBAL)
public class Test {
public String name;
public Test(String name) {
this.name = name;
}
public void sayHello() {
return "Hello" + this.name;
}
}
我的类(就在html模块中,也在核心模块中尝试过,仍然不起作用)如下所示:
gradlew.bat html:dist --daemon -generateJsInteropExports=true
package com.mypackage.myapp.client;
import jsinterop.annotations.JsPackage;
import jsinterop.annotations.JsType;
@JsType(namespace = JsPackage.GLOBAL)
public class Test {
public String name;
public Test(String name) {
this.name = name;
}
public void sayHello() {
return "Hello" + this.name;
}
}
我的想法快用完了。能不能有人帮我弄清楚该怎么做,这样它才能工作
一些可能有用的信息:
我的html.gradle
中的代码:
gwt {
gwtVersion='2.8.0' // Should match the gwt version used for building the gwt backend
//...
modules 'com.mypackage.myapp.GdxDefinition'
devModules 'com.mypackage.myapp.GdxDefinitionSuperdev'
project.webAppDirName = 'webapp'
compiler {
strict = true;
disableCastChecking = true;
}
}
import org.wisepersist.gradle.plugins.gwt.GwtSuperDev
//...
task superDev (type: GwtSuperDev) {
dependsOn startHttpServer
doFirst {
gwt.modules = gwt.devModules
}
}
//...
来自myproject gradle的代码
buildscript {
//...
dependencies {
classpath 'org.wisepersist:gwt-gradle-plugin:1.0.6'
//...
}
}
project(":html") {
apply plugin: "gwt"
apply plugin: "war"
dependencies {
compile project(":core")
compile "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion"
compile "com.badlogicgames.gdx:gdx:$gdxVersion:sources"
compile "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion:sources"
compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion:sources"
compile "com.badlogicgames.gdx:gdx-box2d-gwt:$gdxVersion:sources"
compile "com.google.jsinterop:jsinterop-annotations:1.0.1"
}
}
project(":core") {
apply plugin: "java"
dependencies {
//...
compile "com.google.jsinterop:jsinterop-annotations:1.0.1"
}
}
//...
更新1
我查看了科林·阿尔沃思的答案和他发布的链接。它仍然不起作用。我改变了:
html.gradle
gwt {
gwtVersion='2.8.0' // Should match the gwt version used for building the gwt backend
maxHeapSize="1G" // Default 256m is not enough for gwt compiler. GWT is HUNGRY
minHeapSize="1G"
src = files(file("src/")) // Needs to be in front of "modules" below.
modules 'com.mycompany.myapp.GdxDefinition'
devModules 'com.mycompany.myapp.GdxDefinitionSuperdev'
project.webAppDirName = 'webapp'
compiler {
strict = true;
disableCastChecking = true;
}
jsInteropExports {
shouldGenerate = true
includePatterns = ['com.mycompany.myapp.client.*']
}
}
就像上面说的
我像这样调用:gradlew.bat html:dist--daemon
,我从GdxDefinition文件中删除了属性generateJsInteropExports
,因为它似乎是错误的
现在我得到以下编译错误:
Task :html:compileGwt FAILED
Unknown argument: -includeJsInteropExports
为什么呢
我不太了解gradle,但我几乎肯定这也是错误的(至少它需要一个-p
前缀,但我看不到您共享的gradle文件中使用了该属性)
相反,对于超级开发模式和生产编译任务,您需要将其传递给gradle插件
快速浏览一下org.wisepsist:gwt-gradle-plugin
的文档,这项任务似乎需要一个GwtJsInteropExportsOptions参数(从和开始工作),在我有限的gradle经验中,它最终会像
jsInteropExports {
generate = true
}
看起来这可以放在gwt{}
块中,与compiler{}
一起
这个插件的跟踪器上有一个问题,它讨论了如何做到这一点。非常感谢@Colin Alworth,我发现了如何让它工作
html.gradle
gwt {
gwtVersion='2.8.0' // Should match the gwt version used for building the gwt backend
maxHeapSize="1G" // Default 256m is not enough for gwt compiler. GWT is HUNGRY
minHeapSize="1G"
src = files(file("src/")) // Needs to be in front of "modules" below.
modules 'com.mycompany.myapp.GdxDefinition'
devModules 'com.mycompany.myapp.GdxDefinitionSuperdev'
project.webAppDirName = 'webapp'
compiler {
strict = true;
disableCastChecking = true;
}
// important part:
jsInteropExports {
shouldGenerate = true
// breaks if I use includePatterns
}
}
而且
- 从Gdx定义文件中删除
- 在导出类的全局命名空间中不使用相同的名称(我知道这是一个愚蠢的错误)
- 编译调用,比如
gradlew.bat html:dist--daemon
完美的结果是:
谢谢,我试过了。它仍然不起作用,请查看我的问题更新!没关系,我知道了。我会马上回答我的问题,包括在2.8.1中添加的模式:
html.gradle
gwt {
gwtVersion='2.8.0' // Should match the gwt version used for building the gwt backend
maxHeapSize="1G" // Default 256m is not enough for gwt compiler. GWT is HUNGRY
minHeapSize="1G"
src = files(file("src/")) // Needs to be in front of "modules" below.
modules 'com.mycompany.myapp.GdxDefinition'
devModules 'com.mycompany.myapp.GdxDefinitionSuperdev'
project.webAppDirName = 'webapp'
compiler {
strict = true;
disableCastChecking = true;
}
// important part:
jsInteropExports {
shouldGenerate = true
// breaks if I use includePatterns
}
}