Maven混合Java/Scala/Lombok项目如何配置实现JavaThenScala编译顺序
解决方案
配置不生效核心原因
- scala-maven-plugin的groupId存在拼写错误,你原有配置写为
met.alchim31.maven,正确值为net.alchim31.maven,拼写错误会导致插件配置完全不生效 - 仅配置compileOrder参数不够,未显式绑定插件执行目标到所有需要的编译阶段,默认仅处理主代码和单元测试代码的编译顺序,不覆盖集成测试/性能测试代码的编译流程
- 未显式声明maven-compiler-plugin的执行优先级,Lombok注解处理需要在Java编译阶段全量完成后再执行Scala编译,默认插件执行顺序可能打乱Java先编译的逻辑
完整可用配置
<build> <plugins> <!-- 先配置maven-compiler-plugin,优先编译所有Java代码,处理Lombok注解 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <!-- 替换为你实际使用的JDK版本 --> <target>1.8</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <!-- 替换为你实际使用的Lombok版本 --> </path> </annotationProcessorPaths> </configuration> <!-- 显式绑定到所有Java代码编译阶段 --> <executions> <execution> <id>default-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>default-testCompile</id> <phase>test-compile</phase> <goals> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> <!-- 修正groupId的scala-maven-plugin,配置Java先编译逻辑 --> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>4.0.0</version> <configuration> <compileOrder>JavaThenScala</compileOrder> <!-- 如果你的性能测试Scala代码放在gatling默认目录,添加下面的配置 --> <sourceDirs> <sourceDir>src/main/scala</sourceDir> <sourceDir>src/test/scala</sourceDir> <sourceDir>src/gatling/scala</sourceDir> </sourceDirs> </configuration> <!-- 显式绑定到所有编译阶段,保证在Java编译完成后执行 --> <executions> <execution> <id>scala-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>scala-test-compile</id> <phase>test-compile</phase> <goals> <goal>testCompile</goal> </goals> </execution> <!-- 绑定到集成测试编译阶段,处理性能测试Scala代码 --> <execution> <id>scala-integration-test-compile</id> <phase>integration-test</phase> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>io.gatling</groupId> <artifactId>gatling-maven-plugin</artifactId> <version>3.1.1</version> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
验证方法
- 执行
mvn clean compile test-compile integration-test-compile查看编译日志 - 确认日志执行顺序为:maven-compiler-plugin 各阶段执行完成 → scala-maven-plugin 各阶段执行完成
- 编译完成后查看target目录下对应class文件,验证带@Data注解的Java类已生成getter/setter方法,Scala性能测试类无引用报错
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

