【发布时间】:2020-07-25 04:01:55
【问题描述】:
我对云和 SBT/IntelliJ 还很陌生,所以尝试使用 IntelliJ & SBT 构建环境将我的 jar 部署到数据处理集群上。
这是我的项目结构的屏幕截图:
代码非常简单,main 定义在 'mytestmain' 中,它调用 'ReadYamlConfiguration' 中定义的另一个方法,该方法需要 moultingyaml 依赖项,我已将其包括在 build.sbt 中。
这是我的build.sbt & assembly.sbt 文件:
lazy val root = (project in file(".")).
settings(
name := "MyTestProjectNew",
version := "0.0.1-SNAPSHOT",
scalaVersion := "2.11.12",
mainClass in Compile := Some("com.test.processing.jobs.mytestmain.scala")
)
libraryDependencies ++= Seq(
"net.jcazevedo" %% "moultingyaml" % "0.4.2"
)
scalaSource in Compile := baseDirectory.value / "src"
assembly.sbt文件:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10")
我创建了 assembly.sbt 来创建 Uber jar 以包含所需的依赖项,并从终端运行 'SBT assembly'。它已经成功创建了一个程序集 jar 文件,我能够在 Dataproc 集群上成功部署和运行。
gcloud dataproc jobs submit spark \
--cluster my-dataproc-cluster \
--region europe-north1 --class com.test.processing.jobs.mytestmain \
--jars gs://my-test-bucket/spark-jobs/MyTestProjectNew-assembly-0.0.1-SNAPSHOT.jar
代码按预期正常运行,没有任何问题。
现在我想拥有自己的自定义目录结构,如下所示:
例如,我想要一个文件夹名称为 'spark-job' 和一个名为 'SparkDataProcessing' 的子目录,然后是 src/main/scala 文件夹,其中包含包和相应的 scala 类和对象等。
我的 main 方法在 'job' 包中的 'com.test.processing' 包中定义。
我需要在build.sbt 中进行哪些更改?根据我的项目结构,我正在寻找以build.sbt 作为示例的详细说明。还请建议gitignore 文件中需要包含的所有内容。
我正在使用IntelliJ Idea 2020 community edition 和SBT 1.3.3 版本。我在这里和那里尝试了一些东西,但总是以结构、jar 或build.sbt 问题告终。
我期待在下面的帖子中得到类似的答案。
Why does my sourceDirectories setting have no effect in sbt?
如下图所示,源目录已更改。
spark-jobs/SparkDataProcessing/src/main/Scala
当我用下面的路径构建它时,它不起作用。
scalaSource in Compile := baseDirectory.value / "src"
当我保持默认结构时它可以工作。喜欢src/main/scala
【问题讨论】:
标签: scala intellij-idea google-cloud-platform sbt sbt-assembly