【问题标题】:QueryDsl 5 with Mapstruct issues while generating resources生成资源时带有 Mapstruct 问题的 QueryDsl 5
【发布时间】:2023-02-14 15:49:16
【问题描述】:

我正在尝试将 MapStruct 与 QueryDsl、Spring Boot 3 和 Java 17 一起使用,但似乎我用于 MapStruct 的 maven-compiler-plugin 阻止生成 QueryDsl 资源。

<dependencies>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>5.0.0</version>
        <classifier>jakarta</classifier>
    </dependency>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>5.0.0</version>
        <classifier>jakarta</classifier>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

如果我删除maven-compiler-plugin,就会生成 QueryDsl 资源,但不会生成 MapStruct。

我也曾尝试添加 QueryDsl 注释处理器,但没有任何运气。

<path>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <version>5.0.0</version>
</path>

有什么建议么?

【问题讨论】:

  • 删除maven-compiler-plugin配置,添加mapstruct-processor作为&lt;scope&gt;provided&lt;/scope&gt;的依赖
  • 遗憾的是 mapstruct bean 现在没有被注入。 mapstruct 和 querydsl 资源似乎都已就位。
  • 一般来说,您有两个选择:要么利用 javac 中的注解处理器发现(将所有带有注解处理器的 jar 定义为具有 scope=provided 的依赖项),要么在 maven-compiler-plugin 配置中设置全套注解处理器(即您需要添加 @987654329 @annotationProcessorPaths)。两种选择都应该导致相同的结果
  • 我都做了,但都没有按预期工作。这可能是 QueryDsl 5.0.0 的错误
  • 嗨@ThanosM 你解决你的问题了吗?我遇到了同样的问题

标签: spring-boot maven querydsl mapstruct


【解决方案1】:

尝试删除 maven-compiler-plugin 并只保留这些依赖项:

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>${querydsl.version}</version>
        <classifier>jakarta</classifier>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>${querydsl.version}</version>
        <classifier>jakarta</classifier>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.5.3.Final</version>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.5.3.Final</version>
        <scope>provided</scope>
    </dependency>

【讨论】:

    【解决方案2】:

    正如其他 cmets 所建议的,一种解决方案是完全删除 maven-compiler-plugin 并添加以下依赖项。

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>5.0.0</version>
        <classifier>jakarta</classifier>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>5.0.0</version>
        <classifier>jakarta</classifier>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.5.3.Final</version>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.5.3.Final</version>
        <scope>provided</scope>
    </dependency>
    

    这将生成 mapstruct 和 querydsl 资源。

    为了强制 mapstruct 将映射器生成为 Spring bean,我还必须设置 @Mapper 注解中的componentModel = MappingConstants.ComponentModel.SPRING 属性。

    【讨论】:

      猜你喜欢
      • 2020-10-12
      • 2021-01-22
      • 2019-12-14
      • 2018-12-05
      • 2020-11-25
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      相关资源
      最近更新 更多