尝试在运行时生成存储库时出现“找不到符号”问题

时间:2019-05-09 13:15:59

标签: java spring-data-jpa dynamically-generated java-compiler-api javacompiler

我正在尝试在运行时使用OpenHFT为spring数据jpa生成一些存储库,以减少样板代码。问题是,当使用IDEA运行时,它运行得很好,但是,如果我在外部tomcat或仅在命令行中运行它:“ mvn spring-boot:run”,它将无法识别外部资源,例如@Resository和一些书面课程。

我尽力查找问题,但没有用,但是我为该问题创建了最小的演示:github。 我还尝试使用不同的类加载器作为OpenHFT编译器的参数,例如.class,Repository.class和Thread.currentThread()。getContextClassLoader()。但仍然会出错。

@EventListener
private void initRepositoryMapping(ApplicationReadyEvent event) {
    unMappedWithRepoEntity.add(Department.class);
    unMappedWithRepoEntity.forEach((clazz) -> {
        String className = "com.example.repository.DepartmentRepository";
        String javaCode =
                "\npackage com.example.repository;" +
                "\nimport com.example.entity.Department;" +
                "\nimport org.springframework.stereotype.Repository;" +
                "\nimport java.util.UUID;" +
                "\nimport com.example.repository.BaseRepository;" +
                "\n@Repository" +
                "\npublic interface DepartmentRepository extends BaseRepository<Department, UUID> {}" ;
        logger.info("generating java class : {} code:{}", className, javaCode);
        try {
            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            logger.info("using classloader: {}", classLoader);
            CompilerUtils.CACHED_COMPILER.loadFromJava(classLoader, className, javaCode);
            System.out.println(Class.forName("com.example.repository.DepartmentRepository"));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    });
}

0 个答案:

没有答案