詳細な手順の図解——win 10の下ideaはsbt方式を使ってscalaソースコードをコンパイルします
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ですね.
設置環境は
公式サイトでダウンロードできる
次に、次の図に示すように、LauncherはCustomを選択し、解凍したファイルの
Googleの小さなパートナーを使うことができるなら、このステップはどうでもいい.使えないならソースを変えて、アリの~
完了後、
sbtには多くのコマンドがあります
私は
sbt sbtVersionの実行結果を入力します.
sbt packageの実行結果を入力します.そうすれば表示されます.生成されたjarパケットはルートディレクトリ/target/scala-2.11/xxxxにある.jar
分割線ぶんかつせん
ここまではパッケージングできるだけでしたが、codingの場合は様々な構成が必要ですね.また、jar、properties、configに依存して様々なメンテナンスを容易にするために、いくつかのjarファイルをパッケージングする必要がある場合もあります.あるjarファイルクラスタにはすでに存在します.パッケージングする必要はありません.このようなニーズを満たすには、
プロジェクトルートディレクトリ/projectの下でbuild.propertiesの同級ディレクトリは
Note:sbt-assemblyのバージョンはsbtのバージョンによって異なります!!!
次に、ルートディレクトリの下にある
###除外jarパッケージprovidedこのjarパッケージsbt-assemblyを含まなくてもよいことは、プロジェクト構成のlibraryDependencies依存に基づいてパッケージ化されていることを示し、パッケージ化の依存を必要としない場合は「provided」を設定して除外することができる
####scalaライブラリを除外するjarパッケージプロジェクトルートディレクトリの下にassemblyを作成する.sbtファイルは、次の構成を追加します(注:sbt-assembly関連の構成は、プロジェクトルートディレクトリ/build.sbtまたはプロジェクトルートディレクトリの下のassembly.sbtファイルで構成できます):
####指定されたjarパッケージを明確に除外
####複数のファイルが同じ相対パスを共有
複数のファイルが同じ相対パスを共有している場合(たとえば、複数の依存JARのアプリケーション.confという名前のリソースなど)、デフォルトのポリシーは、すべての候補が同じ内容であることを検証することです.そうしないとエラーが発生します.この動作は、以下の組み込みポリシーの1つまたはカスタムポリシーを使用して、各パスに基づいて構成できます.
いくつかのプロファイルをメモに置く
クラスタは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/scala
にHelloScala.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