我有点困惑。有些文档说Java 9是“实验性的”:
https://mapstruct.org/documentation/stable/reference/html/#_using_mapstruct_on_java_9
[并且我找到了一个人在Java 10中遇到问题的帖子。因此,我们将前往Java 11,我想知道Mapstuct是否可以在该环境中工作。具体来说,它将在编译时生成代码,并且生成的代码在那里工作吗(我想后者可以)。
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库,这也会导致阻止类生成的问题。