我有点困惑。有一些文档说Java 9是“实验性的”:
https://mapstruct.org/documentation/stable/reference/html/#_using_mapstruct_on_java_9
我发现了一个帖子,其中有人在Java 10中遇到问题。所以我们要去Java 11,我想知道Mapstuct是否可以在这种环境下工作。具体来说,它将在编译时生成代码,并且生成的代码在那里工作吗(我想后者可以)。
答案 0 :(得分:3)
是的,它可以在工作中的Java 11 / Spring Boot 2项目上工作,并且我们使用Mapstruct不会出现问题。
答案 1 :(得分:1)
是的,虽然我在将DropWizard项目(1.3.7)迁移到Java 11时遇到了一些麻烦,但还是有可能的。文档中提出的配置(通过maven-compiler-plugin
)不起作用对我来说(未显示任何错误,但未生成mapper类),所以我不得不使用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
是专为我们的项目准备的,但是我要强调的是,如果您要从xml标记的xml标记版本2.x进行更改,那么请注意。compilerArguments
部分是必需的,因为该插件运行javac
并将Java版本1.6作为默认参数,如果您使用的是lambda表达式或该语言的其他新功能,则该插件将无效。在编译时,请确保注意插件的输出,它应该仅显示警告,否则它不会生成您的类,并且您会得到一个通用的ClassNotFound
异常,但原因可能是某些原因不允许您的插件正确编译。
[INFO] --- maven-processor-plugin:3.3.3:process
...
7 warnings
还要确保您的类路径中没有比1.3.0.Final
早的任何版本的mapstruct库,这也会导致阻止类生成的问题。
答案 2 :(得分:-1)
我对JDK11使用了以下配置
<properties>
<mapstruct.version>1.3.1.Final</mapstruct.version>
<maven.compiler.version>3.6.1</maven.compiler.version>
</properties>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
<scope>provided</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
然后mvn全新安装将在target \ generated-sources \ annotations
中生成impl类。