.sbt文件是scala还是sbt专有语言?请帮助破译sbt构建定义。
lazy val root = <--- Instance of the SBT Project object? Why "lazy"? Is "root" the reserved keyword for sbt to identify the project in the build.sbt?
(project in file(".")) <--- Is this defining a Project object regarding the current directory having the SBT expected project structure?
.settings( <--- Is this a scala function call of def settings in the Project object?
name := "NQueen",
version := "1.0",
scalaVersion := "2.11.8",
mainClass in Compile := Some("NQueen")
)
libraryDependencies ++= Seq( <--- libraryDependencies is a reserved keyword of type scala.collection.Seq using which sbt downloads and packages them as part of the output jar?
"org.apache.spark" %% "spark-core" % "2.3.0", <--- Concatenating and creating the full library name including version. I suppose I need to look into respective documentations to find out what to specify.
"org.apache.spark" %% "spark-mllib" % "2.3.0"
)
// <--- Please explain what this block does and where I can find the explanations.
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.firs
}
请提供良好的资源来了解设计,机制以及.sbt的工作原理。我查看了SBT入门和文档但是作为Scala定义本身,很难理解。如果是make,ant或maven,那么事情如何拼凑在一起,设计/机制如此清晰,但需要为SBT找到好的文档或教程。
我查看了下面的参考资料,试图理解。
答案 0 :(得分:1)
让我先简化一下build.sbt
。它包含一些不必要的部分,没有它们将更容易解释
name := "NQueen"
version := "1.0"
scalaVersion := "2.11.8"
mainClass in Compile := Some("NQueen")
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.3.0",
"org.apache.spark" %% "spark-mllib" % "2.3.0"
)
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.firs
}
并提出您的问题:
嗯,这两者都是。您可以在.sbt文件是scala还是sbt专有语言?
.sbt
文件中执行大多数scala操作。您可以导入和使用外部依赖项,编写自定义代码等。但您可以执行某些操作(例如,定义类)。:=
,in
,%%
,{{ 1}}都是用scala编写的函数)
libraryDependencies是scala.collection.Seq类型的保留关键字,使用sbt下载并将它们打包为输出jar的一部分?
%
不是保留关键字。您可以将其视为配置项目的一种方式
写libraryDependencies
你基本上设置了libraryDependencies := Seq(..)
的值
但你的意思是正确的。它是应该下载的依赖项列表。
连接并创建包含版本的完整库名称。我想我需要查看相应的文档以找出要指定的内容。
请注意,libraryDependencies
和%%
是函数。您可以使用这些函数指定应下载哪些模块并添加到类路径中
你可以在mvnrepository中找到许多依赖项(及其版本)
例如,对于spark:https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.11/2.3.0
请解释这个区块的作用以及我可以在哪里找到解释。
%
是来自sbt-assembly插件的设置
该插件允许您将应用程序打包到具有所有依赖项的单个jar中
你可以在这里阅读合并策略:https://github.com/sbt/sbt-assembly#merge-strategy