在Eclipse中附加jar文件的源代码

46
我在eclipse中的Build Path中添加了一个名为Student.jar的外部库,步骤如下:

右键单击项目->Build Path->Configure Build Path->Libraries->Add External Jars

Student.jar文件中有一个名为StudentTest的类。当我在eclipse中调试代码时,我进入了Student.jar中的StudentTest类。
之后,eclipse显示以下消息:

JAR文件S:\some_location\Student.jar没有源附件。 您可以通过单击下面的“Attach Source”来附加源。

现在我不确定应该如何在我的eclipse中附加源文件,也不知道从哪里获取源文件。有人能提供一步一步的指导吗?

更新: 我尝试解压缩Student.jar文件,得到了Student文件夹。然后我尝试将源代码指向Student文件夹,但仍然无法正确查看类以便进行调试,它显示与上述相同的行为。


@Kata,我对这一行很困惑:根据位置填写“位置路径”字段,可以在工作区、外部文件或外部文件夹之间进行选择。单击确定。 我需要选择哪个位置路径呢?我应该解压“Student.jar”文件夹然后指向“Student文件夹”吗?还是其他什么。我尝试了上面的选项,但仍然看到相同的行为。 - AKIWEB
@Nevzz03 对不起,我粘贴了错误的链接。这是正确的链接:http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fref-properties-source-attachment.htm - user626607
@Kata,请查看我的先前评论。 - AKIWEB
相关问题:https://dev59.com/i2oy5IYBdhLWcg3wlvCX - Adriano
如何在Eclipse中设置第三方库的断点? - Adriano
显示剩余3条评论
13个回答

39

使用 Java Source Attacher

它完成了Eclipse应该完成的事情 - 右键单击上下文菜单中有“附加Java源代码”选项。

输入图像描述

它会自动为您下载源代码并进行附加。我只遇到过一些它不认识的库,当发生这种情况时,它会让您将URL贡献给社区,以便其他人不会遇到同样的问题。


1
我发现这个插件有一个重大问题。我已经下载了一个Maven依赖的JAR文件,但在尝试获取该JAR文件的源代码时,出现了错误:“对不起,我们的数据库中找不到源代码”。即使提供了GitHub仓库的URL,它也无法下载源文件。 - vikramvi
2
我在Eclipse STS中有一个Maven项目。我没有看到附加源选项。 - MasterJoe
仅供参考,它无法附加Java10源代码,但是我们可以手动附加它。 - 027

18
Eclipse显示没有源代码,因为没有可用的源代码。您的jar文件只有编译后的类。
您需要从jar导入项目并将项目添加为依赖项。
另一个选项是进入属性(针对项目)-> Java构建路径->库,选择您的jar文件并单击源代码,会出现附加源代码和Javadoc的选项。

谢谢Avinash,我尝试了你的第二个选项,但仍然显示相同的内容。我的操作是-解压缩jar文件后,我会得到一个文件夹,对吧?所以如果我指向那个文件夹,我应该能够正确地看到源代码,对吧?但是这对我来说并没有发生。我无法正确地查看类文件。 - AKIWEB
你说你无法正确查看类文件是什么意思?类文件不会以可读格式存在,因为它们包含字节码。如果你在文件夹中没有源文件(.java),那么你唯一的选择就是反编译Java类,然后附加源文件夹。 - Avinash Singh
1
@Nevzz03 JAR文件中是否包含任何.java文件?很可能它只包含.class文件。然而,Eclipse要求您告诉它.java文件的位置,因此JAR文件在这里可能没有用处。 - Code-Apprentice

16
一个.jar文件通常只包含.class文件,而不是编译自.class文件的.java文件。这就是为什么Eclipse告诉你它不知道那个类的源代码。

在JAR中"附加"源代码意味着告诉Eclipse源代码可以在哪里找到。当然,如果你自己也不知道,这个功能帮助不大。当然,你可以尝试谷歌源代码(或检查你从哪里得到的JAR文件)。

话虽如此,你并不一定需要源代码来调试。


1
只有当JAR文件包含源代码(*.java文件),而大多数JAR文件并不包含... - meriton
1
@Nevzz03你是否有编译成那些.class文件的.java文件?如果没有,那么不行,因为你没有这些源文件可以附加到Eclipse。 - Code-Apprentice
如果你使用Eclipse,另一个选择是使用JAD插件,在后台反编译类。请参见http://jadclipse.sourceforge.net/。 - Adriano
3
请注意,使用反编译器(或使用自动执行此操作的插件,例如Eclipse的JAD插件)“创建Java文件”时,在这些创建的.java类中将不会出现注释。 因此,在调试时,调试器可能无法正确同步(即它将指示您正在执行第120行,而实际上正在执行第100行)。 因此,如果您可以获取包含注释的真实源代码,则始终更好。 - Adriano
1
@oikonomopo的回答应该被接受。要是我早点知道那个附加组件就好了。 - Roger
显示剩余3条评论

6

这对于我来说,在Eclipse-Luna中有效:

  1. 右键单击您的项目下的“已引用库”文件夹中的*.jar,然后单击属性
  2. 使用Java源代码附件页面,将指向工作区位置或外部位置的源代码连接到该jar。

1
截至我写这篇文章时,该过程已经发生了变化。Java Build Path > Libraries > the-subject-jar-file。请注意库名称左侧的右尖括号(>)。单击尖括号右侧和名称左侧。现在您将看到“源附件:”字段。 - mbmast

2
我知道现在已经很晚了,但这对其他用户会有帮助,我们可以用以下三种方式来完成工作...
1)1.使用附加源代码的方式
即,在项目上右键单击,然后选择属性--> Java build path--> 在源选项卡中附加您的源代码,或者您可以删除jar文件并在库选项卡中附加源代码。
2.使用Eclipse Source Analyzer
在Eclipse市场中,您可以下载Java Source Analyzer插件,该插件用于附加开源jar文件的源代码。安装插件后,我们可以通过右键单击开源jar并选择附加源选项来实现。
3.在Eclipse中使用Jadclipse
最后但并非最不重要的是,您可以使用此插件来反编译您的代码。您可以从Eclipse市场下载插件并将其安装在Eclipse中,类似地,在jadclipse视图中,您可以查看您的.class文件以将其反编译为源格式。请注意,在此处您无法看到注释和隐藏内容。

我认为在您的情况下,您可以使用选项一和选项三,如果我只想要源代码而不是调试代码,则只选择选项三。否则,我会选择选项1,因为我已经有可用的源代码了。

2

返回添加jar文件的位置,我认为是库选项卡,我没有打开Eclipse,但听起来应该是这样。在你添加的jar文件左侧应该有一个向右的箭头,点击它会展开3或4个选项,其中之一是库的源文件。点击它并点击编辑(我认为你也可以双击它),然后定位硬盘上的文件或文件夹,你可能需要点击应用或确定,然后你就可以了,Javadoc和我认为最后一个是本地库也是同样的方法。如果你还没有注意到,我在里面时不太关注。这就是你要问的,对吗?


1

只需从jar文件中导入所需源类的包即可在代码中使用。

您可以在jar的子包中找到:

Eclipse -- YourProject --> Referenced libraries --> yourJars --> Packages --> Clases

例如-- 我曾经遇到过mysql connector jar的问题,通过指定源文件夹的路径,它显示了这个声明:"源附件不包含源代码"。

The source attachment does not contain the source for the file StatementImpl.class

然后我只需导入包含所需类的mysql connector jar包:

import com.mysql.jdbc.*;

程序运行良好。

1

我遇到了同样的问题,并通过以下步骤解决。 转到Windows->首选项->编辑器->文件关联

在此处单击添加 然后输入.class 单击确定

再次单击添加 然后输入.classwithoughtsource 单击确定

现在您将能够在Windows->首选项中的Java部分下看到JadClipse选项

请按如下所示提供jad.exe文件的路径。

反编译程序的路径-C:\ Users \ ahr \ Documents \ eclipse-jee-galileo-SR2-win32 \ jad.exe 临时文件目录-C:\ Users \ ahr.net.sf.jadclipse

单击应用

现在,您应该能够以正确的格式查看类文件。


1
很可能,只需转到构建路径中的JAR文件并选择像下面这样附加源代码即可。 enter image description here

0

我曾经遇到过同样的问题,并通过以下场景解决了它。

  1. 首先,我们必须确定我们想要哪个jar文件的源代码以及版本号。例如,“Spring Core”»“4.0.6.RELEASE”

  2. 打开https://mvnrepository.com/并搜索名称为“Spring Core”»“4.0.6.RELEASE”的文件。

  3. 现在Maven存储库将显示该jar文件的详细信息。

  4. 在那些详细信息中,有一个选项“查看全部”,只需单击即可。

  5. 然后,我们将导航到URL“https://repo1.maven.org/maven2/org/springframework/spring-core/4.0.6.RELEASE/”。

  6. 有很多选项,因此选择并下载“spring-core-4.0.6.RELEASE-sources.jar”到我们的系统中,并将相同的jar文件作为源附件附加到eclipse中。


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