java - GWT 编译无法加载类

标签 java eclipse gwt javac gwt-compiler

我正在尝试通过命令行从我的项目编译 GWT(没有 Ant/Maven) 像这样

java -cp "/home/user/gwt-2.8.2/*:/home/user/myapp/src:/home/user/myapp/lib/*" com.google.gwt.dev.Compiler com.myapp.webservices.SpwrWebServices

但是抛出错误

Loading inherited module 'com.myapp.webservices.SpwrWebServices'
   Loading inherited module 'gwt.material.design.GwtMaterialWithJQuery'
      Loading inherited module 'gwt.material.design.GwtMaterialDesignBase'
         [WARN] Line 40: Setting configuration property named 'CssResource.legacy' in module 'gwt.material.design.GwtMaterialDesignBase' that has not been previously defined
   [ERROR] Line 18: Unable to load class 'com.myapp.webservices.client.util.GitCommitGenerator'
java.lang.ClassNotFoundException: com.myapp.webservices.client.util.GitCommitGenerator
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at com.google.gwt.dev.cfg.ModuleDefSchema$ClassAttrCvt.convertToArg(ModuleDefSchema.java:899)
    at com.google.gwt.dev.util.xml.HandlerArgs.convertToArg(HandlerArgs.java:64)
    at com.google.gwt.dev.util.xml.HandlerMethod.invokeBegin(HandlerMethod.java:221)
    at com.google.gwt.dev.util.xml.ReflectiveParser$Impl.startElement(ReflectiveParser.java:296)
    at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
    at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at com.google.gwt.dev.util.xml.ReflectiveParser$Impl.parse(ReflectiveParser.java:349)
    at com.google.gwt.dev.util.xml.ReflectiveParser$Impl.access$200(ReflectiveParser.java:70)
    at com.google.gwt.dev.util.xml.ReflectiveParser.parse(ReflectiveParser.java:431)
    at com.google.gwt.dev.cfg.ModuleDefLoader.nestedLoad(ModuleDefLoader.java:316)
    at com.google.gwt.dev.cfg.ModuleDefLoader.load(ModuleDefLoader.java:243)
    at com.google.gwt.dev.cfg.ModuleDefLoader.doLoadModule(ModuleDefLoader.java:193)
    at com.google.gwt.dev.cfg.ModuleDefLoader.loadFromResources(ModuleDefLoader.java:151)
    at com.google.gwt.dev.cfg.ModuleDefLoader.loadFromClassPath(ModuleDefLoader.java:126)
    at com.google.gwt.dev.Compiler.compile(Compiler.java:139)
    at com.google.gwt.dev.Compiler$1.run(Compiler.java:118)
    at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:55)
    at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:50)
    at com.google.gwt.dev.Compiler.main(Compiler.java:125)

我确实有文件 src/com/myapp/webservices/client/util/GitCommitGenerator.java 所以我不明白我显示了这个错误。我的 gwt 配置 xml 文件如下所示

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.7.0//EN" "\s">
<module rename-to= "SpwrWebServices">
    <inherits name="com.google.gwt.user.User" />

   <!--  GwtMaterialWithJQuery module is smaller and should be  used for production code -->
   <!--   <inherits name="gwt.material.design.GwtMaterialWithJQuery" /> -->

   <!-- GWTMaterialWithJQueryDebug   This module  is larger and includes non-minified source for easier debugging --> 
   <!-- GWT Material -->
    <inherits name="gwt.material.design.GwtMaterialWithJQuery"/>
    <inherits name="gwt.material.design.addins.GwtMaterialAddins"/>
    <inherits name="org.fusesource.restygwt.RestyGWT" />
    <inherits name='com.googlecode.gwt.charts.Charts'/>
    <inherits name="org.moxieapps.gwt.uploader.Uploader"/>
    <set-property name="gwt.logging.enabled" value="TRUE"/>
    <set-property name="gwt.logging.logLevel" value="INFO"/>
    <generate-with class="com.myapp.webservices.client.util.GitCommitGenerator">
        <when-type-assignable class="com.myapp.webservices.client.util.GitCommit"/>
     </generate-with>
  <source path="client" />
  <!--  <source path ="shared" />  -->
    <entry-point
        class="com.myapp.webservices.client.SpwrWsEntryPoint" />
    <set-property name="user.agent" value="gecko1_8,safari"/>
    <set-configuration-property name='xsiframe.failIfScriptTag' value='FALSE'/>
</module>

上面的配置有什么问题,我怎样才能得到一个干净的编译?

最佳答案

首先,生成器不应该再写新的,你应该从 Java Annotation Processors 或其他一些不依赖于 GWT 编译器生成代码的特性开始。

其次,您编写的任何生成器都不应该放在您的 client 包中,而应该放在 GWT 不会尝试将其编译为 JS 源代码的某个地方。人们通常对类使用 rebind 约定,这样您就可以更改 GWT 代码的绑定(bind)并生成新类。

最后,看起来您在源代码上运行 GWT 编译器,而没有先用 java 编译它们。首先,使用 javac 将所有 .java 文件编译为 .class 文件,然后将它们传递到类路径的其余部分。从技术上讲,您只需要生成器及其引用的任何内容,但您可能希望 Javac 在 GWT 之前报告错误,因为它会做得更好。

考虑使用 Maven 或 Gradle 来管理您的构建,这样它就可以为您完成 javac 工作,并构建类路径以提供给 GWT。

关于java - GWT 编译无法加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55158429/

相关文章:

java - 我收到错误'编译 'com.android.support:design:23.0.1' 编译 'com.android.support:appcompat-v7:23.0.1'

java - 现有应用程序(java/eclipse/android)到其他平台

java - 如何在同一行获取用户输入

javascript - 在 javascript 中访问/生成 java 枚举

java - 每当我单击“后退”/“主页”按钮时,代码的asynctask部分就会关闭/停止该应用程序

java - 通过 http 寻找 api/协议(protocol)

gwt base64 图像

java - 如何使用 GWT RPC 在客户端保存文件?

java - 将txt文件写入mySQL数据库

android - gitignore android 包含 apk