【问题标题】:Gradle build ignores Jetbrains annotationsGradle 构建忽略 Jetbrains 注释
【发布时间】:2018-01-30 08:36:38
【问题描述】:

假设我们有以下测试代码:

import org.jetbrains.annotations.NotNull;
import org.junit.Test;

public class NullTest {

  @Test
  public void testNull() {
    doNothing(null);
  }

  private @NotNull String doNothing(@NotNull String value) {
    return value;
  }
}

直接运行gradle test 或IDEA 将操作委托给gradle 时,测试将通过。 但如果它使用 IDEA runner(未委托给 gradle)运行,它将因IllegalArgumentException: Argument for @NotNull parameter 'value' must not be null 异常而失败。

问题是:如何使用 gradle 运行测试失败?

【问题讨论】:

    标签: java gradle intellij-idea


    【解决方案1】:

    我找到的最简单的解决方案是应用org.jetbrains.intellij 插件。 因为除其他外,该插件“将编译任务修补为带有可空性断言的代码”。

      apply plugin: 'org.jetbrains.intellij'
    
      intellij {
        instrumentCode = true
        downloadSources = false
      }
    

    【讨论】:

    • 但此时下载 500MB+ jar :/
    • 在一个 GitHub 问题中,an employee of JetBrains suggests 基于IntelliJInstrumentCodeTask 编写自己的 Gradle 插件。这可能有助于下载的大小。
    • 这个解决方案是否仍然有效?我尝试了这个,并确保启用了断言,但是尽管将空值分配给使用 @NotNull 注释的变量,但我无法抛出任何断言
    • 它仍然有效,问题是我正在检查@NotNull String bar = null;但这显然无法检测,检查返回值上的 @NotNull 注释确实有效。
    • 如何使这个解决方案适应 Maven?
    【解决方案2】:

    尝试将以下内容添加到您的依赖项中。它对我有用。

    compile 'org.jetbrains:annotations:13.0'
    

    【讨论】:

    • 这帮助我让 Gradle 停止构建失败,但我不确定这正是 OP 的问题(这就是为什么这个答案可能被否决的原因)。
    【解决方案3】:

    使用此代码 - 没办法,因为您使用来自 org.jetbrains.annotations.* 的注释,这些注释仅在 intellij idea 测试运行器中使用。对于 gradle,注释 @NotNull(或 @Nullable)什么也没说。 Maven 也没有看到这个注释。我可以建议您使用 Objects.requireNonNull(T obj) 进行空值检查。

    【讨论】:

    • 不幸的是,由于项目规模和团队协议,这很难做到。无论如何,我希望找到 gradle 的解决方案。
    【解决方案4】:

    我们发现 Lombok 的 @NonNull 效果更好。但是您需要将 IDEA 配置为在与可空性相关的分析和生成过程中更喜欢这个

    【讨论】:

      【解决方案5】:

      添加以下依赖项对我有用:

      compile group: 'org.jetbrains', name: 'annotations', version: '15.0'
      

      运行“依赖项”任务并按下 Gradle 中的刷新按钮。

      【讨论】:

        猜你喜欢
        • 2022-10-19
        • 2016-05-22
        • 2018-10-20
        • 2011-12-17
        • 2020-07-17
        • 2021-05-11
        • 2011-11-13
        • 2012-07-16
        • 2011-09-15
        相关资源
        最近更新 更多