有没有办法找出一个班级所在的maven神器?

时间:2015-01-27 16:28:06

标签: java spring maven dependencies intellij-14

我试图升级我们的Spring版本并使用Spring IO Platform BOM这样做,但是我们的一些类已经丢失(转移到其他工件中)或者不再依赖于我正在拉动的某些东西我试图找出他们原来属于哪个包(例如CSVStrategy)。其中一些依赖项(例如WhitespaceTokenizer)有十几个可以提供它的工件名称,为了找到正确的升级路径,我需要弄清楚它目前来自哪里。

2 个答案:

答案 0 :(得分:1)

一种可能的方法是获取资源(类)位置。如果该类来自jar文件,您至少会获得jar名称。从那以后你应该能够识别出maven神器。

someClass.getProtectionDomain().getCodeSource().getLocation().toURI();

或者使用ResourceLoader和logger,您可以在classpath / servlet-path上打印所有类的列表。

@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?
    }
}    

答案 1 :(得分:0)

我过去曾使用JBoss Tattletale来完成此类任务。我不认为它会被积极维护,但它仍然适用于我。这是我使用的配置。请注意,我必须将此添加到我的POM构建部分,即使目标是'报告'似乎暗示它是一个报告插件。

<plugin>
  <groupId>org.jboss.tattletale</groupId>
  <artifactId>tattletale-maven</artifactId>
  <!-- The version of the plugin you want to use -->
  <version>1.2.0.Beta2</version>
  <executions>
    <execution>
      <goals>
        <goal>report</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
  <!-- This is the location which will be scanned for generating tattletale reports -->
    <source>${project.build.directory}/${project.artifactId}/WEB-INF/lib</source>
    <!-- This is where the reports will be generated -->
    <destination>${project.build.directory}/site/tattletale</destination>
  </configuration>
</plugin>

您也可以尝试jHades。我还没有机会使用它,这是我要调查的事项清单。