在Eclipse中附加源代码的问题

5
在Eclipse(Ganymede)中,我正在调试一些使用Apache Commons HttpClient的代码,并希望进入HttpClient的代码。我已经下载了源代码并尝试以正常方式附加它(在方法名上按CTRL键并使用“附加源”按钮)。我尝试过将其作为外部文件和外部文件夹附加,但都没有成功。我之前也附加过源代码,没有出现问题,目前可以成功地进入Hibernate源代码。
我甚至尝试直接编辑.classpath文件手动添加sourcepath。仍然没有运气。刷新项目,进行干净的构建,关闭并重新打开Eclipse都无法解决问题。令人沮丧的是,Eclipse没有提供任何错误消息;它只是不附加源代码。
以下是.classpath中的条目:
<!-- Hibernate. Works -->
<classpathentry kind="lib" path="/myEAP/EarContent/APP-INF/lib/hibernate.jar" sourcepath="D:/Data/Download/hibernate-3.2.2.ga/hibernate-3.2/src"/>

<!-- Commons HttpClient. Will not attach -->
<classpathentry kind="lib" path="/myEAP/EarContent/APP-INF/lib/commons-httpclient.jar" sourcepath="D:/Data/Download/commons-httpclient-3.1/src/java"/>

我尝试将路径更改为D:/Data/Download/commons-httpclient-3.1/src,但也没有起作用。

目录结构如下:

D
  Data
    Download
      commons-httpclient-3.1
        src
          java
            org
              apache
                commons
                  httpclient
                    AutoCloseInputStream.java
                    ... (and so forth)

你能重新格式化.classpath条目以使其可见(在标记后)吗? - Dave L.
6个回答

6

尝试将它指向直接包含顶级包的目录,例如 "D:/Data/Download/commons-httpclient-3.1/src/java"。对我有效的方法是创建一个新的 src zip 文件,其中包含 "org" 文件夹和其下所有内容。

以下是我的 .classpath 条目(对我有效),希望能有所帮助:

<classpathentry kind="lib" path="/blib/java/commons-httpclient-3.1/commons-httpclient-3.1.jar" sourcepath="/blib/java/commons-httpclient-3.1/commons-httpclient-3.1-src.zip"/>

4
我发现有时候你会指向你认为是正确的目录,但它仍然声称在所附加的源文件中找不到该文件。
这些时候,我意识到最后一个路径元素是 "src"。只需删除此路径元素(因此实际上指向位于 "org" 或 "com" 文件夹所在的路径的上一级),就可以神奇地使其正常工作。
不知何故,如果存在 "src" 路径元素,Eclipse 似乎会暗示它,如果您将其包含在源路径中,则 Eclipse 会出问题。或类似的情况。

3
尝试附加src.zip而不是未解压的src?

谢谢,我想我可以尝试在 Europa 中打开这个项目。 - Paul Croarkin
幸运的是,JDK src.zip文件已经随我的Java安装自动安装了。在Windows 64位系统上,src.zip的典型位置是C:\Program Files\Java\jdk_yourVersion。 - MasterJoe

2
尝试将其添加到启动配置的源路径中。

1

我认为问题在于源存档路径中的空格(或本地化)符号。尝试将其移动到具有简单路径的另一个位置。


1

附加源代码并不是进入类路径上的库所必需的,该库还必须使用调试符号进行编译。通常这不是问题,因为大多数Java库都以这种方式编译和分发,但正如您所发现的那样,其中一些库没有。

有趣的是,即使没有附加源代码,您实际上也可以进入外部库,只是无法看到逐行源代码(所有调试信息仍然有效)。

您可以通过编译自定义版本的Commons HttpClient(不太困难),或者跳过整个“进入库”的想法来“解决”此问题。作为一般开发实践,进入第三方库很少会产生有用的信息。在过去的十年中,我可能只做过一两次,但两次都没有让我更接近解决手头的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接