有没有办法找出一个类位于哪个 Maven 工件中?

xen*_*ide 5 java spring dependencies maven intellij-14

我正在尝试升级我们的 Spring 版本并使用 Spring IO Platform BOM 来执行此操作,但是我们的一些类丢失了(移至其他工件中)或者不再是我正在引入的某些东西的依赖项。试图找出它们最初属于哪个包(一个例子是 CSVStrategy )。其中一些依赖项例如WhitespaceTokenizer有十多个可以提供它的工件名称,为了找到正确的升级路径,我需要弄清楚它当前来自哪里。

Mar*_*rey 1

一种可能的方法是获取资源(类)位置。如果该类来自 jar 文件,您至少会获得 jar 名称。由此您应该能够识别 Maven 工件。

someClass.getProtectionDomain().getCodeSource().getLocation().toURI();
Run Code Online (Sandbox Code Playgroud)

或者使用 ResourceLoader 和记录器,您可以打印类路径/servlet 路径上所有类的列表。

@Autowired 
ResourceLoader resourceLoader;

public void printResourceLocations() {
    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(resourceLoader);
    Resource[] resources = resolver.getResources("classpath*:com/**/*.class"));
    for (Resource resource : resources) {
        log.info(resource.getURI()); 
        // Not sure if that works, probably getFile() is ok?
    }
}    
Run Code Online (Sandbox Code Playgroud)