Guava Google在java中使用反射

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

我试图在Java项目中使用反射(也使用SpringBoot),并且我必须获得实现接口的包的所有类

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>