Java 如何将sun.nio.fs代码加载到IntelliJ中?
我正在尝试在Java 如何将sun.nio.fs代码加载到IntelliJ中?,java,intellij-idea,jar,openjdk,Java,Intellij Idea,Jar,Openjdk,我正在尝试在UnixFileSystemProvider中加载代码,以便调试。IntelliJ生成源存根,但找不到库 // IntelliJ API Decompiler stub source generated from a class file // Implementation of methods is not available 这让我感到困惑,因为我知道它存在于openjdk中,这可能是因为我正在运行openjdk,所以我可以访问它的源代码 我使用findjar.com,一个非常
UnixFileSystemProvider
中加载代码,以便调试。IntelliJ生成源存根,但找不到库
// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available
这让我感到困惑,因为我知道它存在于openjdk中,这可能是因为我正在运行openjdk,所以我可以访问它的源代码
我使用findjar.com,一个非常好的资源,我希望它有任何基本的资源,来搜索它,并希望在Maven回购协议或其他东西中找到它,但什么都没有找到
我如何让我的IDE知道这个源代码,或者通过自己获取一个jar,给它Maven坐标,或者其他方式?下面是一个线程,它应该回答获取源代码的问题: 在我的intellij版本中,我通过定义jvm/jdk添加了jdk源代码,然后在“项目结构”->“源路径”选项卡中,我将其指向与我的java版本匹配的src.zip文件 jar:///Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/src.zip!/ 要关联jar文件的源,可以按如下方式定义库:
<component name="libraryTable">
<library name="SBT: com.typesafe.play:play-datacommons_2.10:2.2.3">
<CLASSES>
<root url="jar://$USER_HOME$/.ivy2/cache/com.typesafe.play/play-datacommons_2.10/jars/play-datacommons_2.10-2.2.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.ivy2/cache/com.typesafe.play/play-datacommons_2.10/srcs/play-datacommons_2.10-2.2.3-sources.jar!/" />
</SOURCES>
</library>
</component>
在此之前,有两个警告:我假设您正在调试来自OpenJDK的代码(它的源代码为
sun.nio.fs.UnixFileSystemProvider
),而我使用的IntelliJ版本是最终版本,我不确定这在社区版中是否也适用;如果是这样,请告诉我,我会编辑我的答案
您需要获取源代码,然后“附加”它以使其与字节码匹配(因此,请确保您获取的源代码是与编译版本对应的源代码)
1-获取源代码
对于v6和v7:
如果您使用的是基于debian的Linux发行版,最好安装来自deb存储库的源代码:
sudo apt-get install openjdk-7-source
或使用资质
:
aptitude install openjdk-7-source
源代码将位于/usr/lib/jvm/java version/src.zip中
或者,也可以在此处下载OpenJDK 7的一个版本:
对于v6:
如果您使用的是OpenJDK v8,那么下载源代码的过程会变得有点复杂,它涉及到使用mercurial
从OpenJDK的网站克隆存储库(这里要解释如何使用mercurial太长了,所以我希望您使用的是v6或v7)
2-将源代码附加到二进制文件
当您从IntelliJ获得反编译器存根时,单击“附加源…”:
然后浏览到源代码所在的位置(目录或zip文件),并选择它:
如果一切正常,您现在应该可以浏览源代码了。问题似乎是关于获取JDK中未提供源代码的
sun
类。不,UnixFileSystemProvider仍然无法访问。您是如何获得源代码的?代码中不是UnixFileSystemProvider.java
?另外,您正在使用哪个版本的OpenJDK?