gpt4 book ai didi

java - 查询 DSL & Maven : Classes not generated, 但仅在命令行上(在 Eclipse 中它工作正常)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:36 32 4
gpt4 key购买 nike

我们正在使用带有 Java 1.8 的 Spring Boot、Hibernate、Query DSL 和 Maven 的设置

最近,我使用下面列出的配置将 Query DSL 添加到项目中。为了让它工作,我必须在 eclipse 项目设置中配置 Java 编译器以允许注释处理,并将查询 DSL .jar 文件添加到 eclipse 注释工厂路径。

此设置按预期工作。它生成了自定义 Q 类,我可以在我的代码中使用它们。现在在命令行上运行 mvn clean install 时,我的代码中的每个类都会抛出错误 cannot find symbol,因为类丢失了。是否还有其他我需要配置的东西 - 类似于 eclipse 设置中的 .jar 文件 - 以使构建过程正常运行?

编辑: 这个问题不是 this question 的重复问题因为我没有问为什么会出现这个错误(找不到符号),而是问如何配置 QueryDSL 也可以在命令行上工作。

EDIT2:我现在尝试集成 build-helper-maven-plugin 以使用多个源路径作为输入。这也没有帮助。我还尝试将文件生成到 src 文件夹中。它也没有帮助。

当我第一次在 eclipse 中编译库时,mvn compile 在命令行上通过,但是 mvn clean compile 仍然失败,因为它只使用编译后的文件再次发生 eclipse 。 apt-maven-plugin 被执行,在构建过程失败之前可以看到:

[INFO] --- apt-maven-plugin:1.1.3:process (default) @ project1 ---
[INFO]
[INFO] --- build-helper-maven-plugin:1.9.1:add-source (add-source) @ project1 ---
[INFO] Source directory: C:\Users\user1\git\project1\src\main\generated added.
[INFO]
[INFO] --- maven-processor-plugin:2.2.4:process (process) @ project1 ---
[ERROR] diagnostic: [...]

EDIT3: 当我删除每个引用 Q 类的导入语句时,构建过程(显然)完成。然而,值得注意的是,在这种情况下,Q 类得到了正确的编译。它们在 target 文件夹中显示为 .class 文件。会不会是 Q 类编译得太晚了?


这是 pom.xml

的摘录
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

[...]
<prerequisites>
<maven>3.0.0</maven>
</prerequisites>

<dependencies>
[...]
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.1.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.1.3</version>
</dependency>
</dependencies>

<build>
<defaultGoal>spring-boot:run</defaultGoal>
<plugins>
[...]
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
[...]
</build>
</project>

这是eclipse项目设置的配置:

enter image description here

这是控制台中显示的错误消息:

[INFO] --- maven-processor-plugin:2.2.4:process (process) @ project1 ---
[ERROR] diagnostic: C:\Users\user1\git\project1\src\main\java\com\project1\repository\UserRepositoryImpl.java:3: error: cannot find symbol
import static com.project1.domain.QUser.user;
^
symbol: class QUser
location: package com.project1.domain

[ERROR] diagnostic: C:\Users\user1\git\project1\src\main\java\com\project1\repository\UserRepositoryImpl.java:3: error: static import only from classes and interfaces
import static com.project.domain.QUser.user;
^

最佳答案

这是一个老问题,但这是我找到解决方案的方式,为 jpa 依赖项添加了分类器:

    <!-- BEGIN: 'querydsl-jpa' -->
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl-jpa.version}</version>
<classifier>apt</classifier>
</dependency>
<!-- END: 'querydsl-jpa' -->

我的完整 pom:

<!-- BEGIN: BUILD -->
<build>

<!-- BEGIN: PLUGINS -->
<plugins>

<!-- BEGIN: apt-maven-plugin -->
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>${apt.version}</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/apt</outputDirectory>
<processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
<!-- END: apt-maven-plugin -->

</plugins>
<!-- END: PLUGINS -->

</build>
<!-- END: BUILD -->

<!-- BEGIN: DEPENDENCIES -->
<dependencies>

<!-- *********************************************** -->
<!-- BEGIN: 'QUERYDSL DEPENDENCIES' -->

<!-- BEGIN: 'querydsl-apt' -->
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl-apt.version}</version>
</dependency>
<!-- END: 'querydsl-apt' -->

<!-- BEGIN: 'querydsl-jpa' -->
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl-jpa.version}</version>
<classifier>apt</classifier>
</dependency>
<!-- END: 'querydsl-jpa' -->

<!-- *********************************************** -->
<!-- END: 'QUERYDSL DEPENDENCIES' -->


</dependencies>

关于java - 查询 DSL & Maven : Classes not generated, 但仅在命令行上(在 Eclipse 中它工作正常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50608356/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com