GWT 模块继承和应用程序运行时没有可用的源代码

Posted

技术标签:

【中文标题】GWT 模块继承和应用程序运行时没有可用的源代码【英文标题】:GWT Module inheritance and NO source code available on application running time 【发布时间】:2010-11-25 12:03:57 【问题描述】:

我开始将 GWT 用于类项目,并想了解 RPC 的实际用例。所以,我在同一个网站上找到了这个例子:Stack Overflow - Simple RPC Use Case Problem (Code Included)

我为什么做这个例子?因为我遇到了用户在我自己的项目中发布的相同错误,我决定尝试在我的计算机上按照他的代码来看看我是否真的能面对自己的错误。

所以重点是,在 Eclipse GWT 项目中复制文件并部署应用程序后,在运行时出现以下两个错误:

第一个错误

12:14:07.874 [ERROR] [test] Line 17: No source code is available for type com.google.gwt.user.server.rpc.RemoteServiceServlet; did you forget to inherit a required module?

第二次错误

12:42:54.547 [ERROR] [test] Unable to find type 'org.redboffin.worldhug.client.test.Test'

12:14:09.341 [ERROR] [test] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly

所以我尝试按照 Craig 在帖子中的建议更正 Test.gwt.xml。不幸的是,该解决方案对我不起作用,因为我仍然遇到相同的错误。

第一个错误:我不知道发生了什么,例如,在描述的文件中,RemoteServiceServlet 之前导入了一些行(尽管没有看到)。该文件位于“org.redboffin.worldhug.server.test;”包中

第二个错误:如果发布初始线程的用户不需要在他的项目中“继承”一个新包,我不明白为什么我需要它们。无论如何,我在 .gwt.xml 文件中添加了一个新的继承行:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.0.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.0.0/distro-source/core/src/gwt-module.dtd">
    <module rename-to='test'>
    <inherits name="com.google.gwt.user.User" />
    <entry-point class="org.redboffin.worldhug.client.test.Test"></entry-point>
<source path="client" />
    <source path="shared" />
    <inherits name="org.redboffin.worldhug.client.test.Test" />
    </module>

这就是我得到的:

 Loading inherited module 'org.redboffin.worldhug.client.test.Test'
     [ERROR] Unable to find 'org/redboffin/worldhug/client/test/Test.gwt.xml' on your classpath; could be a typo, or maybe you forgot to include a classpath entry for source?

(当然,它没有编译)

所以,我真的不知道发生了什么。请问,有人可以为这个问题带来一些启示吗?为什么这不起作用?我在做什么坏事? 2nd error 需要的这个类型是什么?

【问题讨论】:

【参考方案1】:

你好艾琳和其他网络流浪者,

也许这是一个已经回答的帖子的双重帖子,或者让我说这是试图澄清 xml 文件中包含 Java 源代码的内容。我被困在同一点上,但我无法指出阿德里安的意思。最后两个源标签将告诉应编译哪些包和尾随源文件。这就是为什么你应该在名为“path”的属性中命名每个包。

以下文件是在框架版本的 Eclipse Indigo 中自动生成的:appengine-java-sdk-1.6.4.1。它没有不必要的 cmets。

<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='wk_cms'>
  <!-- Inherit the core Web Toolkit stuff. -->
  <inherits name='com.google.gwt.user.User'/>
  <inherits name='com.google.gwt.json.JSON'/>
  <inherits name='com.google.gwt.http.HTTP'/>

   <inherits name='com.google.gwt.user.theme.chrome.Chrome'/>

  <!-- Other module inherits -->

  <!-- Specify the app entry point class. -->
  <entry-point class='de.someproject.wkcms.client.Wk_cms'/>

  <!-- Specify the paths for translatable code -->
  <source path='client'/>         <<-- my code (package client)
  <source path='communication'/>  <<-- my code (package communication)
</module>

我希望这能让每个人在成功之前远离探索和测试... =)

最好的问候, semo

附言。编辑的文件不是 web.xml 而是 PROJECTNAME.gwt.xml。

【讨论】:

【参考方案2】:

我想我看到了:

Test.java 应该在client.test 包中,而不仅仅是client,或者所有内容都应该指向client.Test 而不是client.test.Test

【讨论】:

事情就是这样,小细节! :)【参考方案3】:

您的服务器类似乎在 server.test 包下,而不仅仅是 server,这可能是错误的。检查 web.xml 中的映射是否正确指向该类。

我怀疑真正的错误可能在其他地方 - 我本来希望它仍然可以编译。

【讨论】:

我刚刚看了这个例子,看起来路径是正确的。但是你为什么使用 SO 中的代码而不是 Google 教程? 我尝试了一些 Google 教程,但我发现它们很长、很复杂,而且对于不熟悉这种 Web 开发的人来说并不清晰。总而言之,我试图按照 StockWatcher 的示例来让我的思路清晰,并且在遵循了所有应用程序后,该应用程序无法正常工作。我感到很沮丧,并且正在寻找像我使用的示例中那样的小东西。尽管如此,我在自己的项目中也面临同样的错误,我想如果我知道如何在一个小项目上修复这些错误,也许我可以在一个更大的项目上做同样的事情。 我做了 stockwatcher 教程并认为它非常好。您应该在教程的每个阶段都有一些工作,而不仅仅是在最后。 GWT 确实有几个文件需要正确设置才能发生任何事情。 是的,除了最后一部分,我的一切都正常工作,它应该看到为列表中的每个项目生成的随机值。 :S GWT 的问题是有时让所有设置同时跳舞并以正确的方式放置会让人感到困惑。【参考方案4】:

(不确定我是否必须“回答您的问题”,请先在 Stack Overflow 网站上尝试!)

感谢您的评论,阿德里安!

这是“web.xml”文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<!-- Servlets -->

<servlet>
    <servlet-name>testServlet</servlet-name>
    <servlet-class>org.redboffin.worldhug.server.test.TestServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>testServlet</servlet-name>
    <url-pattern>/worldhug/test/testService</url-pattern>
</servlet-mapping>

<!-- Default page to serve -->
<welcome-file-list>
    <welcome-file>test.html</welcome-file>
</welcome-file-list>
</web-app>

在我看来,servlet 标记似乎指向了正确的位置:TestServiceImpl.java 在包内 "org.redboffin.worldhug.server.test"你是这个意思吗?

还有什么想法吗?

再次感谢您! :)

【讨论】:

是的,这就是我的意思,是的,它看起来没问题。但是,查看第二个错误,我建议 Test.java 在错误的包中(或者它正在错误的包中寻找它)。【参考方案5】:

您必须包括以下内容

<source path='client.test'/>

【讨论】:

以上是关于GWT 模块继承和应用程序运行时没有可用的源代码的主要内容,如果未能解决你的问题,请参考以下文章

我在 GWT 编译器中编译源代码时遇到错误。“com.reveregroup.gwt.imagepreloader.FitImage 类型没有可用的源代码”

如何编译没有 EntryPoint 的模块?

com.sencha.gxt 类型没有可用的源代码;你忘了继承一个必需的模块吗?

gwt - 在继承的模块中访问 servlet 的问题

GWT“共享”对象继承/转换器的替代品

没有可用于类型的源代码。你忘了继承一个必需的模块吗