【问题标题】:GWT webappcreator creating a Maven project: the source attachment does not contain the source for the file URLClassPath.classGWT webappcreator 创建 Maven 项目:源附件不包含文件 URLClassPath.class 的源
【发布时间】:2011-05-17 22:10:45
【问题描述】:

我创建了一个基于 Maven2 的 GWT 应用程序,将其导入 Eclipse,当我作为 GWT Web 应用程序进行调试时,Eclipse 调试会话因 FileNotFoundException 而暂停。它显示一个窗口说:源附件不包含文件 URLClassPath.class 的源。

我已经完全清除了 Eclipse 工作区(和 .metadata 子目录),创建/导入了一个空白项目,同样的事情发生了。如果我执行 Run As GWT Web 应用程序,它可以正常工作(带有几个警告)。我需要调整什么才能让它在调试模式下工作?

重现问题的步骤

1) 创建应用程序

webAppCreator -noant -maven -XnoEclipse -out MyApp com.example.MyApp

2) 导入和更改设置

  • 应用程序被导入 Eclipse 工作区,在设置中选中“使用 Google Web Toolkit”复选框。

  • 选中“此项目有一个 WAR 目录”。 WAR 目录设置为 src/main/webapp。 “从此目录启动和部署”未选中。

3) 调试为

现在按下调试工具栏按钮,选择“GWT Web Application”,并选择target/www 作为WAR 目录。你应该看到同样的问题。 Debug 窗格中的调用堆栈包含以下内容:

MyApp.html [Web 应用程序]
com.google.gwt.dev.DevMode 在 本地主机:51620 线程 [主] (暂停(例外 FileNotFoundException))
URLClassPath$JarLoader.getJarFile(URL) 线路:644
URLClassPath$JarLoader.access$600(URLClassPath$JarLoader, 网址)行:540
URLClassPath$JarLoader$1.run() 行: 607
AccessController.doPrivileged(PrivilegedExceptionAction) 行:不可用 [本机方法]
URLClassPath$JarLoader.ensureOpen() 线路:599
URLClassPath$JarLoader.(URL, URL流处理程序, HashMap) 行:583
URLClassPath$JarLoader$3.run() 行: 810
AccessController.doPrivileged(PrivilegedExceptionAction) 行:不可用 [本机方法]
URLClassPath$JarLoader.getResource(String, 布尔值,设置)行:806
URLClassPath$JarLoader.getResource(String, 布尔值)行:765
URLClassPath.getResource(字符串, 布尔值)行:169
URLClassLoader$1.run() 行:194
AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) 行:不是 可用 [本机方法]
Launcher$AppClassLoader(URLClassLoader).findClass(String) 线路:190
Launcher$AppClassLoader(ClassLoader).loadClass(String, 布尔值)行:307
Launcher$AppClassLoader.loadClass(String, 布尔值)行:301
Launcher$AppClassLoader(ClassLoader).loadClass(String) 行:248 C:\程序 文件\Java\jdk1.6.0_21\bin\javaw.exe (2010 年 11 月 28 日 15:28:32)

版本和插件

GWT:2.1。

日食:太阳神 (3.6)。

Maven:2.2.1。

JRE/JDK:JDK 1.6.0.21。

适用于 Eclipse 3.6 版本 1.4.0.v201010280102 的 Google 插件。

Maven Integration for Eclipse (m2eclipse) 版本 0.10.2.20100623-1649(已配置为指向 Maven 2.2.1 环境,而不是使用嵌入式 Maven3“实例”)。

【问题讨论】:

  • 您是否已将 M2eclipse 配置为下载所有工件的源代码?
  • 我没有这样做,但现在有了。没有什么不同。

标签: java eclipse maven-2 gwt maven


【解决方案1】:

在 Eclipse 中转到 Window -> Preferences -> Java -> Debug 并禁用所有暂停执行选项。

由于此错误可能不是由您的应用程序引起的,因此您实际上并不需要该类的源代码 (URLClassPath)。您可以在 Oracle 的/Sun 的 Java 站点中搜索源代码并将 Eclipse 指向它们,如果您真的想要的话;)

【讨论】:

  • 如果我单击“在未捕获的异常上暂停执行”,那么它确实不会在调试启动时打扰我。我会将其标记为已接受的答案。我很想知道这些异常发生的确切原因,以及为什么它们不出现在非 Maven GWT 项目中,但我将把它作为单独的事情来做......
  • 下载 Java 源代码(例如 java.net/download/jdk6/6u23/promoted/b03/…),解压缩并将 Eclipse 指向它们。看看 arg0/path 对我来说是“/home/fuepi/.m2/repository/com/google/gwt/gwt-servlet/2.1.0/gwt-servlet.jar”。不幸的是,真正的文件名是“gwt-servlet-2.1.0.jar”。所以我做了“ln -s gwt-servlet-2.1.0.jar gwt-servlet.jar”,现在调试器运行正常:)通过调整 pom.xml 解决这个问题会更好,但现在这个解决方法适用于我。
  • 我照你说的做了,因为我的 arg0/path 是“/C:/M2Repository/com/google/gwt/gwt-servlet/2.1.0/gwt-servlet.jar”。将 gwt-servlet-2.1.0.jar 复制到 gwt-servlet.jar 后,它也可以在这里工作。很高兴了解更多关于这方面的信息,谢谢!我不得不想知道为什么它要寻找 gwt-servlet.jar 呢?在 Project Explorer 下,Maven Dependencies 与带有版本号的 jar 相关。我已经删除了项目和 GWT SDK 之间的链接。再次感谢您的帮助。
  • 我也想知道为什么即使安装了JDK源,也很难检查变量。您可以看到函数的参数,但看不到有趣的局部变量。很抱歉我有这么多问题,我可能应该在 StackOverflow 上提出这些不同的问题。
  • 为有同样问题的人提供一些额外信息:有一份 GWT 问题报告关于此问题,准确解释了发生这种情况的原因:请参阅 code.google.com/p/google-web-toolkit/issues/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2011-12-23
相关资源
最近更新 更多