【发布时间】:2022-01-20 05:55:56
【问题描述】:
我正在尝试将我的 springboot 版本从 2.3.4 升级到 2.6.1。我将查询 dsl 与 jpa 和 apt-maven-plugin 一起使用。我的问题是,当我运行 maven compile 时,我无法再生成 QClasses。我注意到我不再能够使用旧版本的 querydsl(以前的 4.4.0 和 apt-maven-plugin 1.1.3)。现在当我尝试使用 4.4.0 时出现错误:
无法解析的导入 POM: com.querydsl:querydsl-bom:pom:4.4.0 在https://repo.maven.apache.org/maven2 中找不到
然后当我切换到 5.0.0 版本时,我遇到了另一个错误:
[INFO] --- apt-maven-plugin:1.1.3:process (默认) @ gof-referentiel-backend --- [警告] 工件 org.apache.commons:commons-io:jar:1.3.2 已重新定位到 commons-io:commons-io:jar:1.3.2:https://issues.sonatype.org/browse/MVNCENTRAL-244 /home/ezek/Documents/projects/gof-referentiel-backend/src/main/java/fr/ubordeaux/gof/referentiel/common/persistence/dao/impl/ContactDAOImpl.java:12:错误:找不到符号 导入 fr.ubordeaux.gof.referentiel.common.persistence.entity.QContactEntity; ^ 符号:QContactEntity 类 位置:包 fr.ubordeaux.gof.referentiel.common.persistence.entity /home/ezek/Documents/projects/gof-referentiel-backend/src/main/java/fr/ubordeaux/gof/referentiel/common/persistence/dao/impl/ContactDAOImpl.java:29:错误:找不到符号 私有静态最终 QContactEntity qContactEntity = QContactEntity.contactEntity;
对于所有使用实体的类,我都会收到此错误。并且什么也没有生成。
这是我的 pom.xml 的相关值:
> <dependency> > <groupId>com.querydsl</groupId> > <artifactId>querydsl-apt</artifactId> > <version>${querydsl.version}</version> > </dependency> > <dependency> > <groupId>com.querydsl</groupId> > <artifactId>querydsl-jpa</artifactId> > <version>${querydsl.version}</version> > </dependency> > > <plugin> > <groupId>com.mysema.maven</groupId> > <artifactId>apt-maven-plugin</artifactId> > <version>1.1.3</version> > <executions> > <execution> > <phase>generate-sources</phase> > <goals> > <goal>process</goal> > </goals> > <configuration> > <outputDirectory>target/generated-sources/java</outputDirectory> > > <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> > </configuration> > </execution> > </executions> ></plugin>
如果可能相关(但我不认为),我也使用 mapstruct 和 lombok,因为 apt-maven-plugin 在它们之前运行。
【问题讨论】:
-
Spring Boot 2.6.1 支持开箱即用的 querydsl 5.0.0。所以删除
version标签,让 Spring Boot 管理它。我怀疑您也可以从插件中删除phase。最后,querydsl-apt依赖可以使用提供的范围。尝试同时使用所有这些不同的处理器(lombok、mapstruct 和 querydsl)可能是一个痛苦的过程。尤其是使用 lombok,因为它会做一些官方不允许做的事情。 -
另外,“错误”是警告而不是错误。检查
commons-io的依赖项并使用正确的位置。 -
我设法删除了警告并删除了 querydsl 版本,但仍然得到相同的结果。该错误与警告下的错误相同
-
在运行的 maven 上启用调试并检查发生了什么。我不会惊讶这会是由龙目岛引起的。
-
但我不知道lombok应该在querydsl之前还是之后运行。我知道在以前的版本中它是在之后但也许......
标签: java spring-boot maven jpa querydsl