我有一个 SBT 版本,用于需要 Java 8 的项目,我还包含了一些 Java 8 功能(主要是{{1在构建本身中。如果我尝试在早期的 JVM (例如1.7)上构建项目,则在运行java.time
命令时会出现大量错误和异常。
因此,我决定添加一个sbt
属性来检测正在使用的 JVM ,如果正在使用的 JVM 并且没有& #39;至少是版本8.当然,这只有在我用它来构建构建器时才有效(如果我把它放在initialize
中,那么如果使用 JVM 我仍会遇到错误1.7或更早,因为./build.sbt
元素不存在)。所以我有一个java.time
文件,其中包含以下内容:
./project/build.sbt
这很有效,但相当不优雅。如果我使用 Java 7 运行initialize := {
val _ = initialize.value
if (!scala.util.Properties.isJavaAtLeast ("1.8")) {
sys.error ("My project requires Java 8 or later")
}
}
,那么我从构建中获得以下输出:
sbt
如果我将相同的代码放在空的java.lang.RuntimeException: My project requires Java 8 or later
at scala.sys.package$.error(package.scala:27)
at $ed9be51e9ab4a59b3b3b$$anonfun$$sbtdef$1.apply(C:\Users\me\Documents\src\myproject\project\build.sbt:55)
at $ed9be51e9ab4a59b3b3b$$anonfun$$sbtdef$1.apply(C:\Users\me\Documents\src\myproject\project\build.sbt:47)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
at sbt.EvaluateSettings$MixedNode.evaluate0(INode.scala:177)
at sbt.EvaluateSettings$INode.evaluate(INode.scala:135)
at sbt.EvaluateSettings$$anonfun$sbt$EvaluateSettings$$submitEvaluate$1.apply$mcV$sp(INode.scala:67)
at sbt.EvaluateSettings.sbt$EvaluateSettings$$run0(INode.scala:76)
at sbt.EvaluateSettings$$anon$3.run(INode.scala:72)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
[error] My project requires Java 8 or later
[error] Use 'last' for the full log.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?
文件中,并使用 Java 7 运行,那么我只是得到:
./build.sbt
也就是说,我没有收到异常消息和堆栈跟踪。
有没有办法让构建构建出口更优雅,以便我得到后一种形式的输出而不是前者?