该SourceFile
属性仅包含文件名,而不是完整或相对路径。这不是太多的信息,因为javac
它将根据声明类的包将.class
文件放置在可能不相关的目录中(相对于参数)。-d
虽然这是在运行时查找和加载类所必需的,但它使.class
文件位置仅提示.java
文件可能位于源树中的位置。
该
com.sun.jdi.ReferenceType.sourcePaths(String)
方法的文档建议使用启发式方法来获取文件系统路径:
在参考实现中,对于没有显式指定源路径的层(Java 编程语言层从不这样做),返回的字符串是源名称(字符串)前缀为这个 ReferenceType 的包名转换为平台相关路径。
没有比这更好的明显方法了。当然,如果文件在预期位置不存在,可以搜索源树并检查文件名是否恰好是唯一的,并将其用作位置。但除此之外,没有太多选择。
有没有其他不明显的方法来解决这个问题?