Gradle JsInterop“;“未定义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

正在尝试使用JsInterop根据Javascript与LibGDX项目通信。下面是“将Java类型导出到JavaScript”示例。它不起作用:未捕获引用错误“com”未定义。不过,我没有在
gradle
中遇到任何错误

我已经:

  • 已选中generateJsInteropExports是否已启用:
  • 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
      }
    }