Mapstruct Java11是否兼容?

时间:2019-11-13 18:08:24

标签: java-11 mapstruct

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

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

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

3 个答案:

答案 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类。