Mapstruct Java11是否兼容?

问题描述 投票:1回答:2

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

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

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

java-11 mapstruct
2个回答
2
投票
是的,它可以在工作中的Java 11 / Spring Boot 2项目上工作,我们使用Mapstruct时没有问题。

0
投票
[是的,有可能,尽管我在将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>

然后按照以下步骤在子模块中配置插件

<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>

    [outputDirectory是我们项目的特定内容,但是我要强调的是,如果您要从te插件的2.x版本开始,xml标记已更改。
  • [compilerArguments部分是必需的,因为该插件运行javac并将Java 1.6版作为默认参数,如果您使用的是lambda表达式或该语言的其他新功能,则该功能将无效。
  • [编译时,请确保注意插件的输出,它只应显示警告,否则它不会生成您的类,并且您将得到通用的ClassNotFound异常,但原因可能是不允许您使用插件可以很好地编译。

    [INFO] --- maven-processor-plugin:3.3.3:process ... 7 warnings

    还请确保您的类路径中没有比1.3.0.Final早的任何版本的mapstruct库,这也会导致阻止类生成的问题。
  • © www.soinside.com 2019 - 2024. All rights reserved.