【问题标题】:Enabling java assertions when using SBT to manage builds使用 SBT 管理构建时启用 java 断言
【发布时间】:2013-02-06 01:59:33
【问题描述】:

一段时间以来,我第一次在 Eclipse 之外进行 Java 编程(用于 coursera 算法课程),并且我正在尝试使用 SBT 进行构建。 SBT 工作正常(虽然启动缓慢),但我不知道如何启用断言。以下两种方法似乎都不起作用。

javaOptions += "-ea" // doesn't work
javaOptions in run += "-ea" // doesn't work either

build.sbt

// disable using the Scala version in output paths and artifacts
crossPaths := false

// Enable assertions?
javaOptions += "-ea" // doesn't work
//javaOptions in run += "-ea" // doesn't work either

organization := "me"

name := "me"

version := "1.0-SNAPSHOT"

// Use jars from parent dir. Normally jars are stuck in lib/
unmanagedJars in Compile += file("../stdlib.jar")

unmanagedJars in Compile += file("../algs4.jar")

快速查找.java

import java.util.Arrays; // I hate java so much

public class QuickFind {
    public int[] id;

    public QuickFind (int N) {
        id = new int[N];
        int i;
        for (i = 0; i < N; i++) {
            id[i] = i;
        }
    }

    public boolean connected (int p, int q) {
        return id[p] == id[q];
    }

    public void union (int p, int q) {
        // Walk through array and make everything with id = p || q
        // equal to id p
        int pid = id[p];
        int qid = id[q];

        int i;
        for (i = 0; i < id.length; i++) {
            if (id[i] == qid) id[i] = pid;
        }
    }

    public static void main (String[] args) {
        StdOut.println("QuickFind"); // from stdlib.jar
        QuickFind uf = new QuickFind(4);
        uf.union(0,1);

        // Assert unions work
        StdOut.println("array=" + Arrays.toString(uf.id));
        assert uf.connected(0,1);
        assert uf.connected(0,2); // <---------------------this should fail
    }
}

【问题讨论】:

    标签: java sbt assertions


    【解决方案1】:

    This link 解释它。简短版本在您的 build.sbt 中使用以下内容:

    // Enable assertions
    fork in run := true
    
    javaOptions in run += "-ea"
    

    【讨论】:

    • 看起来也是我需要的,但我不知道如何将其应用于 xsbt-web-plugin 提供的container:start 命令——有什么想法吗?
    【解决方案2】:

    对于那些可能难以让断言在 SBT 项目下工作的人来说,这可能对你有所帮助。

    我尝试了fork := true javaOptions += "-ea" 甚至sbt "show run-options" 都证明了标志在javaOptions中。 由于某种奇迹般的原因,运行时断言仍然不起作用。

    我不确定这是 SBT 错误还是什么。但直到我使用 export _JAVA_OPTIONS="-ea" sbt 是否运行最终记录 Picked up _JAVA_OPTIONS: -ea

    我希望这会有所帮助,因为我确实花了 3 个小时在这上面。

    【讨论】:

      【解决方案3】:

      我想知道为什么您需要在构建中启用断言

      -ea 选项在您实际运行程序时启用断言检查。这是一个java 选项,而不是javac 选项。您不需要(AFAIK 也不能)在构建时启用/禁用代码中的断言。

      【讨论】:

      • 我在构建中不需要它。我只是希望能够从命令行轻松构建/运行 java 代码,并启用断言检查。
      猜你喜欢
      • 2012-01-07
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 2011-12-17
      相关资源
      最近更新 更多