[解決済み] IntelliJ IDEAでSBTを使用してUber JAR (Fat JAR)をビルドする方法は?
質問
SBT(intelliJ IDEA内)を使って、簡単なScalaプロジェクトをビルドしています。
私は、SBTがどのようなものであるかを知りたいと思います。 最も簡単な方法 を構築するための Uber JAR ファイル(別名Fat JAR、Super JAR)を構築します。
現在SBTを使用していますが、JARファイルを提出する際に Apache Spark というエラーが出ます。
スレッド "main" java.lang.SecurityException で例外が発生しました。無効な 署名ファイルのダイジェストが無効です。
または、コンパイル時にこのエラーが発生します。
java.lang.RuntimeException: deduplicate: 異なるファイルのコンテンツが見つかりました。 を以下に示します。
PATHDEPENDENCY.jar:META-INF/DEPENDENCIESにあります。
PATHDEPENDENCY.jar:META-INF/MANIFEST.MFを参照してください。
それは のように見えます。 のように見えるのは、私の依存関係の一部が署名ファイル (META-INF) を含んでいるからで、これは最終的な Uber JAR ファイルで削除される必要があります。
を使おうとしたのですが sbt-assembly というようなプラグインを使ってみました。
/project/assembly.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.12.0")
/project/plugins.sbt
logLevel := Level.Warn
/build.sbt
lazy val commonSettings = Seq(
name := "Spark-Test"
version := "1.0"
scalaVersion := "2.11.4"
)
lazy val app = (project in file("app")).
settings(commonSettings: _*).
settings(
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.2.0",
"org.apache.spark" %% "spark-streaming" % "1.2.0",
"org.apache.spark" % "spark-streaming-twitter_2.10" % "1.2.0"
)
)
"をクリックすると ビルドアーティファクト... をクリックすると、JAR ファイルが表示されます。しかし、私は同じエラーで終わる...
私はSBTに新しく、IntelliJ IDEであまり実験していません。
ありがとうございます。
どのように解決するのですか?
最終的に、私はグローバルな理解にノイズを発生させないために、IntelliJ IDEAを完全にスキップしています :)
を読み始めたのは SBT公式チュートリアル .
以下のようなファイル構成でプロジェクトを作成しました。
my-project/project/assembly.sbt
my-project/src/main/scala/myPackage/MyMainObject.scala
my-project/build.sbt
を追加しました。 sbt-assembly プラグイン で、私の アセンブリ.sbt ファイルに記述します。これでファットなJARをビルドできるようになりました。
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.12.0")
私の最小限の build.sbt は次のようになります。
lazy val root = (project in file(".")).
settings(
name := "my-project",
version := "1.0",
scalaVersion := "2.11.4",
mainClass in Compile := Some("myPackage.MyMainObject")
)
val sparkVersion = "1.2.0"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion % "provided",
"org.apache.spark" %% "spark-streaming" % sparkVersion % "provided",
"org.apache.spark" %% "spark-streaming-twitter" % sparkVersion
)
// META-INF discarding
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
}
備考
: は
% "provided"
は、最終的なファット JAR に依存関係を含めないという意味です (これらのライブラリは私のワーカーにすでに含まれています)。
ノート : META-INF の破棄 この回答に触発されて .
これで、SBTを使ってファットJARをビルドできるようになりました( インストール方法 ) を使って、次のコマンドを私の /my-project のルートフォルダで次のコマンドを実行します。
sbt assembly
私のファットJARは、新しく生成された /target フォルダーにあります。
/my-project/target/scala-2.11/my-project-assembly-1.0.jar
誰かのお役に立てれば幸いです。
IntelliJ IDE内にSBTを組み込みたい人のために。 IntelliJ IDEA 内から SBT-assembly タスクを実行するにはどうすればよいですか。
関連
-
[解決済み】IntelliJ IDEAプロジェクトに外部jar(lib/*.jar)を追加するための正しい方法
-
[解決済み] Scalaのforループは下降か減少か?
-
[解決済み] Scalaのリストを作成するための好ましい方法
-
[解決済み] Any、AnyVal、AnyRef、Objectの関係と、Javaコードでのマッピングについて教えてください。
-
[解決済み] sbtとGradleの比較 [終了しました]。
-
[解決済み] build.sbtとbuild.scalaの違いは何ですか?
-
[解決済み] Scalaでリストを2つのフィールドでソートするには?
-
[解決済み] sbtの依存関係ツリーを見るには?
-
[解決済み] Scalaでimmutable.Mapをmutable.Mapに変換するにはどうしたらいいですか?
-
[解決済み] Scala型プログラミングリソース
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] private[this] vs private
-
[解決済み] ジッパーがコモナドである理由を理解する
-
[解決済み] Scalaのアクター:受信と反応
-
[解決済み] build.sbtとbuild.scalaの違いは何ですか?
-
[解決済み] 末尾再帰関数が最適化されるためのScalaアノテーションは何ですか?
-
[解決済み] Scalaでリストを2つのフィールドでソートするには?
-
[解決済み] Scalaの慣用表現「flatmap that s*** 」はどこから来たのか?
-
[解決済み] Scalaでサブアレイを取得する正しい方法は何ですか?
-
[解決済み] タイプダイナミックの仕組みと使い方を教えてください。
-
[解決済み] Scalaのtraitでvalとdefの使い分けは?