Mapstruct Java11 兼容吗?

mar*_*rea 4 mapstruct java-11

我有点困惑。有一些文档说 java 9 是“实验性的”:

https://mapstruct.org/documentation/stable/reference/html/#_using_mapstruct_on_java_9

我发现了一个帖子,其中有人在 Java 10 中遇到了问题。所以我们将前往 Java 11,我想知道 Mapstuct 是否可以在该环境中工作。具体来说,它会在编译时生成代码并且生成的代码在那里工作(我想后者会)。

小智 6

是的,它适用于工作中的 Java 11 / Spring Boot 2 项目,我们使用 Mapstruct 没有问题。


e_l*_*iel 6

是的,这是可能的,尽管我在将 DropWizard 项目 (1.3.7) 迁移到 java 11 时遇到了一些困难。文档中建议的配置(通过 )对maven-compiler-plugin我不起作用(没有显示错误,但映射器类没有生成)所以我不得不使用maven-processor-plugin v3.3.3.

以下是我设法做到这一点的方法:

使用添加依赖项<org.mapstruct.version>1.3.1.Final</org.mapstruct.version>

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>${org.mapstruct.version}</version>
</dependency>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>${org.mapstruct.version}</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后在子模块中配置插件如下

<plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <version>3.3.3</version>
    <executions>
        <execution>
            <id>process</id>
            <goals>
                <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <processors>
                    <!-- list of processors to use -->
                    <processor>org.mapstruct.ap.MappingProcessor</processor>
                </processors>
                <outputDirectory>${basedir}/target/generated-sources-mappers</outputDirectory>
                <compilerArguments>-source 11 -target 11</compilerArguments>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
  • outputDirectory是我们项目特有的内容,但我留下来强调一个事实,即 xml 标签从 te 插件的 2.x 版本开始发生了变化,以防您要从该版本迁移。
  • compilerArguments部分是必需的,因为插件运行时javac传递 java 版本 1.6 作为默认参数,如果您使用 lambda 表达式或该语言的其他新功能,则该部分将不起作用。

编译时,请务必注意插件的输出,它应该只显示警告,否则它不会生成类,并且您将得到一个通用异常,ClassNotFound但原因可能是不允许您的插件编译良好。

[INFO] --- maven-processor-plugin:3.3.3:process
...
7 warnings
Run Code Online (Sandbox Code Playgroud)

还要确保您没有任何版本比1.3.0.Final类路径中旧的 mapstruct 库版本,这也会导致阻止类生成的问题。