2013-07-25 20 views
11

私はscalaでコーディングしており、sbt-assemblyプラグインでSBTを使用しています。私のプロジェクトには多くの外部ライブラリがあるため、sbt-assemblyはJARファイルをパックするのに時間がかかります。私は自分のコードと依存関係のために別々のjarファイルを持っていたいと思います。したがって、私は単に私のコードだけを再コンパイルして再パックすることができます。これを行う方法?これまでsbt-assembly:dependancies jarとmain jarをリンクする方法は?

進捗状況:

assembleArtifact in packageScala := false

assembleArtifact in packageDependency := false

その後、別の瓶がで構築することができます:build.sbt

次のコマンドは、ライブラリを梱包からSBT-アセンブリを防止します次のコマンドを渡します:assemblyassembly-package-scalaおよびassembly-package-dependency。彼らは3つのジャーを作ります:私のプログラムを含むもの、スカラーライブラリを持つもの、すべての依存関係を持つもの。

ただし、jarファイルは、別のjarファイルの依存関係が表示されないため、もう実行できません。私はクラスパスをアセンブリsbtに追加する必要があると思うが、私はこれを行う方法がわからない。私がSBTを初めて利用しているので、お手伝いください(詳細なコメントは高く評価されます)。ありがとう!

答えて

4

https://github.com/xerial/sbt-packでsbt-packプラグインを使用してください。これまで私はそれをプロジェクトと依存関係をパックする最もクリーンな方法であることを発見しました。

5

Setting Classpath Still Can't Find External Jarを参照してください。

このオプションを使用すると、JARファイルはすべてのユーザー・クラスのソースになり、他のユーザー・クラスのパス設定は無視されます。

java -cp "foo-assembly-0.1-deps.jar:foo-assembly-0.1.jar" Main 
Mainは、メインクラスの名前です

、そして:は、お使いのOS(Windows上;)上のファイルの区切りである:

だから、あなたは言っています。

現在、assembly-package-scalaにバグがありますが、空になりますが、assembly-package-dependencyにもScalaライブラリが含まれているため、問題ではありません。

+0

これは機能します。それは速いです:約40秒から数秒に時間が短縮されます。テクニカルノート: 'scala-library-2.10.2-assembly.jar'もインクルードする必要がありました。そうしないと、scala replが不安定だったからです。私はsbt 0.12.4とsbt-assembly 0.9.0でコンパイルすることができました。 – Karolis

+0

メインのjarファイルにこのクラス参照をパッケージ化する方法はありますか?したがって、jarをクリックすることで実行することができます。 – Karolis

+0

[sbt-onejar](https://github.com/sbt/sbt-onejar)は、他のjarファイルを含むjarファイルを作成することができます。しかし、おそらくsbt-onejar'ed jarが飛んで解凍する必要があるため、sbtアセンブリの起動が早くなると聞きました。 sbt-assembly 0.9.0は​​unzipsをキャッシュするので、分割する必要はありません。 –

関連する問題