一个类通过一个注解实现预编译(通过 javax.annotation.processing.Processor)比如:Lombok,MapStruct…DDDD~
问题描述以前在本项目中(meta-INF.services.javax.annotation.processing.Processor)中,因为不能 mvn install 同时编译然后讲加了注解的源文件再经过 Processor 编译,所以每次都只能手动对该源文件进行编译。
但是我讲整个项目打成 jar 引到一个 A 项目(无父子模块)中的时,直接可以 mvn install 下来,并且里面也会同时对那个源文件进行 Processor 编译,成功!
A 项目 pom 文件
org.apache.maven.plugins maven-compiler-plugin3.8.1
现在我将这个 jar 引入到一个 B 项目(属于父子模块并且在子模块中)时,再 mvn install 的时候发现并编译出来的文件并没经过 Processor 编译,失败了唉~
问题分析于是对上述 A、B 项目进行 Pom 分析,因为其他基本都一样引包方式也都是本地引入,一开始还怀疑是不是父子项目模块 ${basedir} 的问题,因为该 jar pom 里面有这个配置
jar pom 文件
org.apache.maven.plugins maven-resources-plugin2.6 process-meta prepare-package copy-resources target/classes ${basedir}/src/main/resources/ **/*
此时,就把 A 项目改造成或者说模拟成 B 项目的情景,但是发现仍然是好的,所以先排除这个 ${basedir} 引起的问题。
后来再仔细对比后发现有个配置叫(我们的主角来了) 存在于 B 项目的父模块中
B 项目 pom 文件
org.apache.maven.plugins maven-compiler-plugin3.8.1 8 UTF-8 org.mapstruct mapstruct-processor${org.mapstruct.version} org.projectlombok lombok1.18.12
有没发现 和之前上面提到的 Processor 很像,而且 mapstruct 和 lombok 都参与了,那么我们的 jar 是不是也应该插一jio~
解决方案1、去除 限制
org.apache.maven.plugins maven-compiler-plugin3.8.1 8 UTF-8
2、添加 配置
org.apache.maven.plugins maven-compiler-plugin3.8.1 8 UTF-8 org.mapstruct mapstruct-processor${org.mapstruct.version} org.projectlombok lombok1.18.12 com.chinadaas.platform dflow0.1-SNAPSHOT
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)