詳細な手順の図解——win 10の下ideaはsbt方式を使ってscalaソースコードをコンパイルします

10918 ワード

win 10下idea sbt方式でscalaソースコードをコンパイルする
クラスタはLinuxを使って、Ubuntuのデスクトップ版もとても良い体験がありますが、windowsの下でコードを書いてjarファイルにコンパイルしてからクラスタに提出して実行するのも悪くないので、本文はwin 10の下でどのように環境を構築するかを記録します
準備作業
idea公式サイトダウンロードhttps://www.jetbrains.com/idea/
sbt官网下载https://www.scala-sbt.org/download.html
いくつかの構成
ideaを開き、右上のFile->SettingsでPlugins(プラグイン)を見つけ、Jetbrainsをインストールするプラグインを選択します
検索ボックスでScalaのバージョンを検索するのはどうでもいいです.コードがハイライトされ、スマートなヒントと連想があるためかもしれません.以降のsbtコンパイルの構成では必ずしもこのバージョンを使用するとは限らないからです.
プラグインのダウンロードが完了するとrestart ideaが表示されます.それではrestartですね.Projectを新規作成し、sbtを選択
設置環境はjavaが必要ですSettingsを開いて、Build Toolsを見つけて、sbtのいくつかのカスタマイズを行います.
公式サイトでダウンロードできるsbt-1.1.6.zip、解凍、解凍後のファイルパスを使用して環境変数に追加してください
次に、次の図に示すように、LauncherはCustomを選択し、解凍したファイルのsbt/bin/sbt-launch.jarを選択します.
Googleの小さなパートナーを使うことができるなら、このステップはどうでもいい.使えないならソースを変えて、アリの~sbtを解凍するディレクトリを見つけて、confフォルダに入って、新しいテキストドキュメントをrepo.propertiesに改名することができます
[repositories]
  local
  aliyun: http://maven.aliyun.com/nexus/content/groups/public/
  typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
  sonatype-oss-releases
  maven-central
  sonatype-oss-snapshots

完了後、Terminalに切り替えます
sbtには多くのコマンドがあります
sbt clean

sbt compile

sbt package

sbt assembly

···


私はpackageコマンドを使用して、scalaをコンパイルして生成した内容をjarパッケージにして、クラスタがここまで実行されるまで、sbt sbtVersionを入力してsbtのバージョンを表示することができて、この過程は長い待ち時間に陥ります.初めては遅いので、コーヒーを飲みに行ったり、黒をつけたりして、後で速くなります.
sbt sbtVersionの実行結果を入力します.
D:\IDEAProjects\SparkSample>sbt sbtVersion
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[info] Loading settings from idea.sbt ...
[info] Loading global plugins from C:\Users\zhongfuze\.sbt\1.0\plugins
[info] Loading settings from assembly.sbt ...
[info] Loading project definition from D:\IDEAProjects\SparkSample\project
[info] Loading settings from build.sbt ...
[info] Set current project to SparkSample (in build file:/D:/IDEAProjects/SparkSample/)
[info] 1.1.6
src/main/scalaHelloScala.scalaを新設
object HelloScala {
  def main(args: Array[String]): Unit = {
    println("Hello Scala!")
  }
}

sbt packageの実行結果を入力します.そうすれば表示されます.生成されたjarパケットはルートディレクトリ/target/scala-2.11/xxxxにある.jar
D:\IDEAProjects\SparkSample>sbt package
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[info] Loading settings from idea.sbt ...
[info] Loading global plugins from C:\Users\zhongfuze\.sbt\1.0\plugins
[info] Loading settings from assembly.sbt ...
[info] Loading project definition from D:\IDEAProjects\SparkSample\project
[info] Loading settings from build.sbt ...
[info] Set current project to SparkSample (in build file:/D:/IDEAProjects/SparkSample/)
[info] Compiling 1 Scala source to D:\IDEAProjects\SparkSample\target\scala-2.11\classes ...
[info] Done compiling.
[info] Packaging D:\IDEAProjects\SparkSample\target\scala-2.11\sparksample_2.11-1.0.jar ...
[info] Done packaging.
[success] Total time: 4 s, completed 2018-7-24 16:12:19


分割線ぶんかつせん
ここまではパッケージングできるだけでしたが、codingの場合は様々な構成が必要ですね.また、jar、properties、configに依存して様々なメンテナンスを容易にするために、いくつかのjarファイルをパッケージングする必要がある場合もあります.あるjarファイルクラスタにはすでに存在します.パッケージングする必要はありません.このようなニーズを満たすには、sbt assemblyコマンドを使用します.
プロジェクトルートディレクトリ/projectの下でbuild.propertiesの同級ディレクトリはassembly.sbtに新設され、内容は以下の通りである.
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.7")

Note:sbt-assemblyのバージョンはsbtのバージョンによって異なります!!!
次に、ルートディレクトリの下にあるbuild.sbtを見つけます.ここでは、多くのコンテンツをカスタマイズしたり、依存を追加したりすることができます.github-sbt-assemblyを参照してください.https://github.com/sbt/sbt-assembly
name := "SparkSample"

version := "1.0"

organization := "com.zhong.PRM"

scalaVersion := "2.11.8"

assemblyJarName in assembly := "PRM.jar"

test in assembly := {}

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)

assemblyMergeStrategy in assembly := {
  case PathList("javax", "servlet", xs@_*) => MergeStrategy.first
  case PathList(ps@_*) if ps.last endsWith ".class" => MergeStrategy.first
  case PathList(ps@_*) if ps.last endsWith ".xml" => MergeStrategy.first
  case PathList(ps@_*) if ps.last endsWith ".properties" => MergeStrategy.first
  case "application.conf" => MergeStrategy.concat
  case "unwanted.txt" => MergeStrategy.discard
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.1.0" % "provided"

###除外jarパッケージprovidedこのjarパッケージsbt-assemblyを含まなくてもよいことは、プロジェクト構成のlibraryDependencies依存に基づいてパッケージ化されていることを示し、パッケージ化の依存を必要としない場合は「provided」を設定して除外することができる
[build.sbt]
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.1.0" % "provided"

####scalaライブラリを除外するjarパッケージプロジェクトルートディレクトリの下にassemblyを作成する.sbtファイルは、次の構成を追加します(注:sbt-assembly関連の構成は、プロジェクトルートディレクトリ/build.sbtまたはプロジェクトルートディレクトリの下のassembly.sbtファイルで構成できます):
[assembly.sbt]
assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)

####指定されたjarパッケージを明確に除外
[assembly.sbt]
assemblyExcludedJars in assembly := {
  val cp = (fullClasspath in assembly).value
  cp filter {_.data.getName == “compile-0.1.0.jar”}
}

####複数のファイルが同じ相対パスを共有
複数のファイルが同じ相対パスを共有している場合(たとえば、複数の依存JARのアプリケーション.confという名前のリソースなど)、デフォルトのポリシーは、すべての候補が同じ内容であることを検証することです.そうしないとエラーが発生します.この動作は、以下の組み込みポリシーの1つまたはカスタムポリシーを使用して、各パスに基づいて構成できます.
MergeStrategy.deduplicate         
MergeStrategy.first               
MergeStrategy.last      
MergeStrategy.singleOrError          
MergeStrategy.concat                 
MergeStrategy.filterDistinctLines    ,            
MergeStrategy.rename     jar     
MergeStrategy.discard         
                 assemblyMergeStrategy   ,         

assemblyMergeStrategy in assembly := {
  case PathList("javax", "servlet", xs @ _*)         => MergeStrategy.first
  case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first
  case "application.conf"                            => MergeStrategy.concat
  case "unwanted.txt"                                => MergeStrategy.discard
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}


いくつかのプロファイルをメモに置く
[plugins.sbt]
logLevel := Level.Warn

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")
[build.sbt]

name := "lanke"

version := "1.0"

scalaVersion := "2.11.8"

assemblyJarName in assembly := "lanke.jar"

test in assembly := {}

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)

assemblyMergeStrategy in assembly := {
  case PathList("javax", "servlet", xs@_*) => MergeStrategy.first
  case PathList(ps@_*) if ps.last endsWith ".class" => MergeStrategy.first
  case PathList(ps@_*) if ps.last endsWith ".xml" => MergeStrategy.first
  case PathList(ps@_*) if ps.last endsWith ".properties" => MergeStrategy.first
  case "application.conf" => MergeStrategy.concat
  case "unwanted.txt" => MergeStrategy.discard
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}

resolvers ++= Seq(
  "kompics" at "http://kompics.sics.se/maven/repository/"
)

javacOptions ++= Seq("-encoding", "UTF-8", "-source", "1.7", "-target", "1.7")

resolvers ++= Seq(
  "libs-releases" at "http://artifactory.jd.com/libs-releases",
  "libs-snapshots" at "http://artifactory.jd.com/libs-snapshots",
  "plugins-releases" at "http://artifactory.jd.com/plugins-releases",
  "plugins-snapshots" at "http://artifactory.jd.com//plugins-snapshots"
)

libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.11" % "2.3.0" % "provided",
  "org.apache.spark" % "spark-sql_2.11" % "2.3.0" % "provided",
  "org.apache.spark" % "spark-streaming_2.11" % "2.3.0" % "provided",
  "org.apache.spark" % "spark-hive_2.11" % "2.3.0" % "provided",
  "org.apache.spark" % "spark-repl_2.11" % "2.3.0" % "provided",
  "org.apache.spark" % "spark-tags_2.11" % "2.3.0" % "provided"
)

libraryDependencies += "com.yammer.metrics" % "metrics-core" % "2.2.0"

libraryDependencies += "com.typesafe" % "config" % "1.2.1"

libraryDependencies += "net.liftweb" % "lift-json_2.11" % "3.0"

libraryDependencies += "com.huaban" % "jieba-analysis" % "1.0.2"

resolvers += "Sonatype OSS Releases" at "http://oss.sonatype.org/content/repositories/releases/"

libraryDependencies += "com.thesamet" %% "kdtree" % "1.0.4"

libraryDependencies += "com.soundcloud" % "cosine-lsh-join-spark_2.10" % "1.0.1"

libraryDependencies += "org.tensorflow" %% "spark-tensorflow-connector" % "1.6.0"

libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.4.0"

[tools/sbt/conf repo.properties]
[repositories]
  local
  my-ivy-proxy-releases: http://artifactory.jd.com/ivy-release/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
  my-maven-proxy-releases: http://artifactory.jd.com/libs-releases/
[respositories]
[repositories]
  local
  aliyun: http://maven.aliyun.com/nexus/content/groups/public/
  typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
  sonatype-oss-releases
  maven-central
  sonatype-oss-snapshots