我正在使用Spring Boot应用程序,我也在使用mongodb。为了创建查询条件,我正在使用QueryDsl库。问题是,它会生成Q类。 我正在使用Jacoco插件来检查代码覆盖率。在jacoco插件中,我可以排除Q类,但我不希望该实现。另一种解决方案是配置QueryDsl,以使生成的类位于不同的程序包中。然后我们可以在jacoco中排除该软件包。
我已经实现了第二种解决方案,即更改Q类的软件包,即
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<options>
<querydsl.packageSuffix>.query</querydsl.packageSuffix>
</options>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
编译时,将在所需的程序包中生成Q类。但是,当我启动应用程序时,出现“找不到类异常” 应用程序期望在定义我的实体的同一包中使用Q类。日志如下,
Caused by: java.lang.ClassNotFoundException: abc.xyz.model.persistence.QFoo
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_151]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_151]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) ~[na:1.8.0_151]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_151]
at org.springframework.util.ClassUtils.forName(ClassUtils.java:274) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.data.querydsl.SimpleEntityPathResolver.createPath(SimpleEntityPathResolver.java:71) ~[spring-data-commons-2.1.0.M3.jar:2.1.0.M3]
注意:我使用的是Spring Boot 2.0.3,也使用的是spring-data-mongodb版本2.1.0.M3(支持mongo 4)。
这个问题已经被提出并且已经解决,但是我不知道为什么它是一个可以接受的答案。 How to register custom Querydsl EntityPathResolver with Spring Data MongoRepositoryFactory?