我有点困惑。有一些文档说 java 9 是“实验性的”:
https://mapstruct.org/documentation/stable/reference/html/#_using_mapstruct_on_java_9
我发现了一个帖子,其中有人在 Java 10 中遇到了问题。所以我们将前往 Java 11,我想知道 Mapstuct 是否可以在该环境中工作。具体来说,它会在编译时生成代码并且生成的代码在那里工作(我想后者会)。
是的,这是可能的,尽管我在将 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 库版本,这也会导致阻止类生成的问题。
| 归档时间: |
|
| 查看次数: |
7073 次 |
| 最近记录: |