스프링 버전을 업그레이드하고 Spring IO Platform BOM을 사용하려고 시도하고 있지만 일부 클래스가 누락되거나 (다른 아티팩트로 옮겨 졌거나) 더 이상 내가 가져온 것의 종속성이 없습니다. 원래 패키지의 일부 패키지 (CSVStrategy)를 찾으려고합니다. WhitespaceTokenizer
과 같은 이러한 종속성 중 일부는이를 제공 할 수있는 12 개의 이슈 이름을 가지고 있으며 정확한 업그레이드 경로를 찾으려면 현재 어디에서 왔는지 파악해야합니다.클래스가 어떤 메이븐 아티팩트를 발견 할 수있는 방법이 있습니까?
0
A
답변
0
하나의 가능한 방법은 리소스 (클래스) 위치를 얻는 것일 수 있습니다. 클래스가 jar 파일에서 나온다면 적어도 jar 이름을 얻습니다. 그로부터 당신은 메이븐 인공물을 식별 할 수 있어야합니다.
someClass.getProtectionDomain().getCodeSource().getLocation().toURI();
아니면위한 ResourceLoader하고 클래스 경로/서블릿 경로에 모든 클래스의 목록을 인쇄 할 수있는 로거와
.@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?
}
}
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도 시도해 볼 수 있습니다. 나는 그것을 사용할 수있는 기회를 아직 가지고 있지 않다. 그것은 조사해야 할 나의 목록에있다.
search.maven.org의 [클래스 이름 검색] (http://search.maven.org/#advancedsearch%7Cgav)이 도움이됩니까? 또한 릴리스 정보를 읽고 싶을 수도 있으며, 이동 된 클래스를 언급해야합니다. –
다시는 도움이 안된다. 왜냐하면 내가 갖고있는 것이 무엇인지 알기를 원하기 때문이다. 언급 된 특정 클래스는 간접적 인 의존성이나 무언가로 보인다. 나는 내가 알아낼 수없는 한, 릴리스 노트를 읽을 수 없다. 사용하고 있습니다. – xenoterracide
이클립스에 있다고 가정하면 소스 코드의 클래스 이름에 마우스 커서를 놓고 F3을 누릅니다. 어쨌든 Java는 짧은 클래스 이름에서는 작동하지 않지만 정규화 된 클래스 이름을 사용하므로 패키지 이름을 나타내는 해당 클래스에 대한 가져 오기가 있어야합니다. 이 클래스를 제공하는 클래스 패스에는 하나의 이슈 만 있어야합니다. – rec