JsInterop "com не определен" - PullRequest
       50

JsInterop "com не определен"

0 голосов
/ 23 февраля 2019

Попытка связаться с проектом LibGDX для Javascript с помощью JsInterop.Я следую примеру «Экспорт типа Java в JavaScript» здесь .Это не работает: Uncaught ReferenceError 'com' не определено .Я не получаю никаких ошибок с gradle.

Я уже:

  1. проверил, что 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>

Я думал, может быть, точка входа HtmlLauncher также должна быть @JsType, но это тоже не сработало.

Также проверено, что generateJsInteropExports включен в GdxDefinitionSuperdev.gwt.xml

Доступ к классу в консоли браузера различными способами, такими как:

.

new com.mypackage.myapp.client.Test();

new Test(); // when setting namespace to global

$wnd.Test(); // JSNI syntax

Я компилирую так:

gradlew.bat html:dist --daemon -generateJsInteropExports=true

Мой класс (прямо в модуле html, также пробовал в модуле ядра, все еще не работает) выглядит так:

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
    }
}
//...

Код из моего project 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, и я удалил свойство generateJsInteropExports из файлов GdxDefinition, так как оно кажется неправильным.

Теперь я получаю следующую ошибку компиляции:

 Task :html:compileGwt FAILED
Unknown argument: -includeJsInteropExports

Почему это?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Большое спасибо @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
  }
}

А также

  • удалить <set-configuration-property name='generateJsInteropExports' value='true'/> из файлов определения Gdx
  • Не использовать одно и то же имя в глобальном пространстве имен для экспортируемых классов (глупая ошибка, я знаю)
  • Компилировать вызов как gradlew.bat html:dist --daemon

И идеальный результат:

enter image description here

0 голосов
/ 23 февраля 2019
   <set-configuration-property name='generateJsInteropExports' value='true'/>

Это определенно не сработает для генерации экспорта

gradlew.bat html:dist --daemon -generateJsInteropExports=true

Я не знаю, ужасно хорошо, но я всено наверняка это тоже неправильно (по крайней мере, для этого нужен префикс -P, но я не вижу, чтобы это свойство использовалось в файле gradle, которым вы поделились).

Вместо этого вам нужно передать егок вашему подключаемому плагину, как для режима Super Dev, так и для задачи производственной компиляции.

С первого взгляда на документы по org.wisepersist:gwt-gradle-plugin видно, что задача примет аргумент GwtJsInteropExportsOptions (работает с http://gwt -gradle-plugin.documentnode.io / javadoc / org /wisepersist / gradle / plugins / gwt / GwtJsInteropExportsOptions.html и http://gwt -gradle-plugin.documentnode.io / javadoc / org / wisepersist / gradle / plugins / gwt / AbstractGwtActionTask.stt. set.wisepersist.gradle.plugins.gwt.GwtJsInteropExportsOptions- ), который в моем ограниченном опыте Gradle в конечном итоге будет выглядеть примерно так:

jsInteropExports {
  generate = true
}

Похоже, что это может идти в блоке gwt {} рядом с compiler {}.

Вот проблема на трекере этого плагина, которая обсуждает, как это сделать https://github.com/jiakuan/gwt-gradle-plugin/issues/19.

...