【问题标题】:Mix Lombok, Java and Scala in a maven project在一个 Maven 项目中混合 Lombok、Java 和 Scala
【发布时间】:2021-09-10 13:42:23
【问题描述】:

我有一个混合的 Scala/Java maven 项目,其中应用程序代码、单元和集成测试是用 Java 编写的,但性能测试是用 Scala 编写的。

Scala 性能测试依赖于几个具有@Data Lombok 注释的Java 集成测试类。为了让 getter 和 setter 工作,我必须编译 JavaThenScala,这可以通过 IntelliJ Scala 编译器设置来完成。

我的问题是 - 有没有一种方法可以设置我的 maven 插件来进行 JavaThenScala 编译,而无需调整 IntelliJ 设置,因为我想将代码部署到其他地方?

我正在尝试使用 compileOrder 配置,但它似乎对我不起作用。

我的 Maven 插件:

  <build>
    <plugins>
      <plugin>
        <groupId>met.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>4.0.0</version>
        <configuration>
            <compileOrder>JavaThenScala</compileOrder>
        </configuration>
      </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 package时会发生什么?
  • 嘿@JRichardsz,我看到Error: value getVariable is not a member of the Class 它位于@Data 注释下。如果我将 @Data 更改为实际的 getter,它可以工作,或者如果我将 IntelliJ 上的 Scala 编译器设置更改为 JavaThenScala 并重新编译它也可以工作
  • 我不确定 scala-maven-plugin 能否与 Java 注释处理一起正常工作。
  • 你的错误发生在哪里?在你的scala测试中,对吧?如果您分享项目的 mvp 将会很有帮助。一个简单的 spring bean 及其测试。
  • 有些奇怪。 mvn package 首先编译所有java类,然后是测试,然后运行测试

标签: java scala maven compilation lombok


【解决方案1】:

免责声明:Gatling 创始人和 scala-maven-plugin 共同维护者在这里

注解处理,尤其是 Lombok,是一个超级怪异的野兽。 似乎 scala-maven-plugin 不支持它,请参阅https://github.com/davidB/scala-maven-plugin/issues/342(由于缺乏活动/贡献而关闭)。

然后,我建议您将 Gatling 测试隔离在一个专用模块中,这样您就可以在一个纯 Java 模块中构建基于 Lombok 的测试类,该模块将发布 test jar,然后让您的 Gatling 模块依赖于这个 test-jar .

【讨论】:

  • 感谢您的调查!我觉得在这一点上,我可能只是为 Scala 需要的几个变量添加一个实际的 getter 而不是 lombok @Data 注释,然后继续使用它。不是最漂亮的选择,但它会起作用。
  • 供您参考,Gatling 3.7 也将带来 Java DSL。
  • 同意,只是在您需要的几个地方不使用 Lombok 可能是最简单的解决方案。
  • 最后只是在我的TestUtils.java 类中创建了一个方法getScalaValues(),它使用lombok 获取我需要的所有值并将它们放入哈希图中。然后在 Scala 中创建了一个 val scalaValues: util.Map[String, String] = TestUtils.getScalaValues 并使用它来填充字段。这是我能想到的最干净的解决方案,因为我并不担心它会慢一点。
猜你喜欢
  • 2016-02-23
  • 2012-06-25
  • 2012-08-24
  • 2018-03-08
  • 2011-05-25
  • 2014-08-18
  • 2011-12-08
  • 2011-01-04
  • 2021-10-25
相关资源
最近更新 更多