使用 querydsl jpa 5.0.0 升级到 springboot 2.6.1

Upgrade to springboot 2.6.1 with querydsl jpa 5.0.0

我正在尝试将我的 springboot 版本从 2.3.4 升级到 2.6.1。我将查询 dsl 与 jpa 和 apt-maven-plugin 一起使用。我的问题是当我 运行 maven 编译时我不能再生成 QClasses。我注意到我不能再使用旧版本的 querydsl(以前的 4.4.0 和 apt-maven-plugin 1.1.3)。现在,当我尝试使用 4.4.0 时出现错误:

Non-resolvable import POM: com.querydsl:querydsl-bom:pom:4.4.0 was not found in https://repo.maven.apache.org/maven2

然后当我切换到 5.0.0 版本时出现另一个错误:

[INFO] --- apt-maven-plugin:1.1.3:process (default) @ gof-referentiel-backend --- [WARNING] The artifact org.apache.commons:commons-io:jar:1.3.2 has been relocated to 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: error: cannot find symbol import fr.ubordeaux.gof.referentiel.common.persistence.entity.QContactEntity; ^ symbol: class QContactEntity location: package 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: error: cannot find symbol private static final 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 运行 在它们之前。

看来您仍然(可能是传递性地)依赖于某些 Querydsl 4.0.0 依赖项。您需要删除那些(我无法指出哪些,因为您没有在代码段中包含完整的 POM)。

我还建议完全摆脱插件,而是使用依赖分类器:

 <dependency>
      <groupId>com.querydsl</groupId>
      <artifactId>querydsl-apt</artifactId>
      <version>${querydsl.version}</version> 
      <classifier>jpa</classifier>
      <scope>provided</scope>
 </dependency> 
 <dependency>
      <groupId>com.querydsl</groupId>
      <artifactId>querydsl-jpa</artifactId>
      <version>${querydsl.version}</version> 
 </dependency>