Guava Google在java中使用反射
我试图在Java项目中使用反射(也使用SpringBoot),并且我必须获得实现接口的包的所有类Guava Google在java中使用反射,java,spring-boot,guava,reflections,Java,Spring Boot,Guava,Reflections,我试图在Java项目中使用反射(也使用SpringBoot),并且我必须获得实现接口的包的所有类 public static Object[] getClasses(String packageName) throws IOException { Reflections r = new Reflections(packageName); Set<Class<? extends EntityXML>> allClasses = r.getSubTypes
public static Object[] getClasses(String packageName) throws IOException
{
Reflections r = new Reflections(packageName);
Set<Class<? extends EntityXML>> allClasses = r.getSubTypesOf(EntityXML.class);
return (Object[]) allClasses.toArray();
}
publicstaticobject[]getClasses(stringpackagename)抛出IOException
{
反射r=新反射(packageName);
设置好,我解决了
我删除了google.guava依赖项,然后做了一个
mvn dependency:tree
在这里,我可以看到我的其他依赖项也导入了google.guava,但是我读到的版本19导致了这种冲突(everit.json依赖项),所以我将google.guava从这个依赖项中排除,它就工作了
<dependency>
<groupId>org.everit.json</groupId>
<artifactId>org.everit.json.schema</artifactId>
<version>1.3.0</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
org.everit.json
org.everit.json.schema
1.3.0
番石榴
番石榴
“它是一个在我的项目中未使用的软件包。”错误消息不同意。您的代码可能没有使用它,但它肯定会在项目中使用。这不是关于导入,而是关于运行方法时google JAR是否在您的生成路径和类路径中。导入只为代码中的类型名提供快捷方式。这是一种方法。但是由于反射带来了在番石榴中,最好明确定义一个版本。否则下次你引入一个带来番石榴的依赖项时,你可能会再次遇到同样的问题。没错,我必须避免导入google.Guava version 19。你不必这样做。你可以导入一个已知的工作番石榴版本(最近的版本)整个问题是因为您不想显式定义依赖项,因为您认为它没有被使用。
<dependency>
<groupId>org.everit.json</groupId>
<artifactId>org.everit.json.schema</artifactId>
<version>1.3.0</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>