当前位置: 首页 > 知识库问答 >
问题:

maven编译器插件真的有必要吗?

尉迟跃
2023-03-14

我正在尝试用我的项目设置mapstruct,我已经习惯了通过简单的jvm代理来完成的lombok,所以我真的不明白如何让mapstruct工作。

这是我的pom:

<properties>
    <m2e.apt.activation>jdt_apt</m2e.apt.activation>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.version}</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-configuration-processor</artifactId>
                        <version>${springboot.version}</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
        <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${springboot.version}</version>
                </plugin>
    </plugins>
</build>

请注意,在mapstruct进入游戏之前,我不需要整个maven编译插件块:一切都很好。我可以毫无问题地构建springboot胖jar,无需明确指定spring和lombok注释处理。。。那是非常美好的时光。

现在我甚至不确定我是否在上面的代码中引入了一些回归,但无论如何,我注意到mapstruct类只在我执行“mvn包”时生成。我希望,像lombok一样,每次保存对象时都会自动生成它们,但这并没有发生。

你有什么想法吗?你能向我保证那个特定的构建块不会改变我Spring启动项目中的任何东西吗?

共有1个答案

长孙淳
2023-03-14

要使代码生成自动工作,请确保已安装m2e apt插件。

至于有没有maven编译器插件块。这是MapSTRt团队喜欢推荐的一种口味。

MapStruct是一个注释处理器,这意味着您在运行时不需要它。因此,您需要注释所在的两个依赖项mapstruct,以及处理器所在的mapstruct处理器。处理器有一些额外的依赖项,并包含用于代码生成的着色Freemarker。

使用annotationProcessorPaths可以使您拥有注释处理器路径,并且不会在类路径上发生冲突,即不会意外地在生产代码中使用一些内部MapSTRt类。最重要的是,您不需要Spring Boot来打包为运行时应用程序提供的依赖关系。

从maven编译器文档中,annotationProcessorPaths表示以下内容:

类路径元素作为注释处理器路径提供。如果指定,编译器将仅在这些类路径元素中检测注释处理器。如果省略,则默认类路径用于检测注释处理器。检测本身取决于annotationProcessors的配置。

因此,如果您确实需要,可以将mapstruct处理器添加到您的正常依赖项中。

 类似资料:
  • 我正在更新一个Spigot(Minecraft)插件,最新版本的Spigot需要Java16。在我的pom中,我将maven编译器插件目标更改为16,源代码仍然是1.8。现在我得到以下错误: POM: 4.0.0

  • 介绍 rustc可以加载编译器插件,它是由用户提供的库用来扩充编译器的行为,例如新的语法扩展,lint检查等。 一个插件是带有设计好的用来在rustc中注册扩展的注册(registrar)函数的一个动态库包装箱。其它包装箱可以使用#![plugin(...)]属性来装载这个扩展。查看rustc::plugin文档来获取更多关于定义和装载插件的机制。 如果属性存在的话,#![plugin(foo(.

  • 新的Maven项目是在eclipse中创建的。但是Pom.xml显示了一些错误。 “无法计算构建计划:Plugin org.apache.maven。插件:maven resources插件:2.6或其一个依赖项无法解析:未能读取org.apache.maven的工件描述符。插件:maven resources插件:jar:2.6 Plugin org.apache.maven。插件:maven

  • 我有与BitBucket版本5.2.2一起工作的插件,我想更新它以支持BitBucket版本6.8.0。如下所示更新我的后,当我尝试运行时,我遇到依赖项错误: pom.xml: 编译时出错: 我不确定所提到的bitbucket版本的amps和bitbucket-maven-plugin的对应版本,这可能是错误的原因之一。

  • 我在maven-compiler-plugin的pom.xml中有以下配置。 JDK的源版本和目标版本应该是什么?它如何依赖于安装在我的计算机上的jdk版本?他们可能不一样吗?例如,安装的jdk是1.8,在源参数-1.6,目标-1.7中。

  • 我有一个maven项目,它是从git回购复制到我的eclipse上的。它是基于Java8构建的。我要做的第一件事就是做一个 但我收到以下失败信息: 以及汇编设置: 无论我构建项目多少次,我都会得到相同的错误。即使在清理项目并从eclipse中刷新它之后也没有帮助。请导游。 更新: 在添加属性以设置maven编译器插件之后 , 我得到以下错误: 下面是给出MainUITabbed类编译错误的代码片段