You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GWT测试报错:No source code is available for type org.json.JSONObject/JSONArray 问题求助

GWT测试报错:No source code is available for type org.json.JSONObject/JSONArray 问题求助

看起来你在给GWT的HttpClient库编写独立测试模块时,遇到了JSON类找不到的问题,我来帮你梳理下可能的问题点和解决办法!

首先先把你的配置和问题信息整理清楚,方便排查:

你的现有配置

1. HttpClient.gwt.xml(主模块)

<module>
  <inherits name="com.google.gwt.core.Core"/>
  <inherits name="com.google.gwt.user.User"/>
  <inherits name="com.google.gwt.i18n.I18N"/>
  <inherits name="com.google.gwt.json.JSON"/>
  <inherits name="com.google.common.collect.Collect"/>
  <inherits name="io.reactivex.RxJava"/>
  <inherits name="org.JSON"/>
  <inherits name="elemental2.dom.Dom"/>
  <set-property name="gwt.logging.enabled" value="TRUE"/>
  <source path="client"/>
</module>

2. HttpClientTest.gwt.xml(测试模块)

<module rename-to="HttpTest">
  <inherits name="com.mycompany.http.HttpClient"/>
  <source path="client"/>
</module>

3. JSON.gwt.xml(自定义JSON模块)

路径:src/main/java/org/JSON.gwt.xml

<module rename-to="JSON">
  <inherits name="com.google.gwt.core.Core"/>
  <inherits name="com.google.gwt.user.User"/>
  <inherits name="com.google.gwt.i18n.I18N"/>
  <inherits name="com.google.gwt.json.JSON"/>
  <set-property name="gwt.logging.enabled" value="TRUE"/>
  <source path="json"/>
</module>

4. 项目结构

JSON library
src/
  main/
    java/org/JSON.gwt.xml
    java/org/json/JSONObject.java
    java/org/json/JSONArray.java
HttpClient library
src/
  main/
    java/com/mycompany/http/HttpClient.gwt.xml
    java/com/mycompany/http/client/HttpClient.java
  test/
    java/com/mycompany/http/client/HttpClientTest.java

错误信息

[ERROR] Line 62: No source code is available for type org.json.JSONObject; did you forget to inherit a required module?
[ERROR] Line 86: No source code is available for type org.json.JSONArray; did you forget to inherit a required module?

问题排查与解决办法

我分析下来,最可能的问题和对应的解决步骤如下:

1. 核心问题:JSON.gwt.xml未被加入类路径

Maven(或其他构建工具)默认只会把src/main/resources下的文件复制到编译后的classpath中,而你把JSON.gwt.xml放在了src/main/java/org/目录下,这个文件不会被自动复制到classpath里,导致GWT在运行/编译时根本找不到你的org.JSON模块!

解决办法:
有两种方式处理:

  • 方式一:把JSON.gwt.xml移动到src/main/resources/org/目录下,这样Maven会自动把它加入classpath。
  • 方式二:修改Maven的pom.xml,配置让src/main/java下的.gwt.xml文件被当作资源复制:
<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.gwt.xml</include>
      </includes>
    </resource>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
</build>

2. 验证模块继承的正确性

虽然你的主模块已经继承了org.JSON,但可以在测试模块中显式添加一次继承,确保GWT不会因为模块加载顺序问题遗漏:
修改HttpClientTest.gwt.xml:

<module rename-to="HttpTest">
  <inherits name="com.mycompany.http.HttpClient"/>
  <inherits name="org.JSON"/> <!-- 显式添加这一行 -->
  <source path="client"/>
</module>

3. 确认代码中的导入语句

检查你的HttpClient.java和HttpClientTest.java中,导入的是自定义的org.json.JSONObject/JSONArray,而不是GWT自带的com.google.gwt.json.client.JSONObject,避免类名冲突导致的识别错误。

4. 验证模块的source路径配置

你的JSON.gwt.xml中<source path="json"/>是正确的:因为模块文件在org包下,source path设为json后,GWT会自动映射到org/json目录(也就是你的JSONObject.java所在的位置),这部分没问题。

最后验证

做完上述修改后,你可以用GWT的verbose模式(加上-v参数)运行测试,查看GWT的模块加载日志,确认org.JSON模块是否被成功加载,这样就能快速定位是否还有其他问题。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:49:31