You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:24:01