使用 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>
我正在尝试将我的 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>