2011-08-25 17 views
12

私の質問は、sbt 0.10.1によって管理されているプロジェクトにあるアプリケーションを実行することです。そのため、依存関係の自動管理(ダウンロードして実行する適切なクラスパスを設定する)に依存します。sbtを使用せずにsbt管理アプリケーションプロジェクトを実行するにはどうすればよいですか?

と表示されます。アプリケーションを実行する唯一の方法は、(Ivy2の助けを借りて)クラスパスを設定する方法を知っているためです。

どのようにsbtなしでアプリケーションを実行できますか?

答えて

11

また、タイプセーフの xsbt-起動スクリプトプラグイン(編集:今sbt-start-script)を使用することができます正しいクラスパスでシェルスクリプトを生成する:

このプラグインを使用すると、スクリプトを生成することができますtarget/startプロジェクト の場合このスクリプトは、プロジェクトを「インプレース」で実行します(最初にパッケージを構築するには は必要ありません)。

target/startスクリプトはsbt runと似ていますが、SBTでは に依存していません。 sbt runは、 がSBT自体をメモリ内に保持するため、本番運用にはお勧めできません。 target/startは、生産中の アプリを実行するためのものです。

start-scripttarget/startを生成するタスクが追加されます。 start-scriptタスクにエイリアスされたstageタスクも追加されます。

これはScalaアプリを実行するためのHeroku usesです。

+0

これは私が今使っているものです - 素晴らしい作品です。 – Thakur

+0

こんにちはベン、多分あなたは[この質問](http://stackoverflow.com/questions/23607291/run-a-sbt-created-app-without-sbt)のヒントを持っていますか? 'sbt-start-script'の完全な例は本当に歓迎です。 –

+0

これはまだ行く方法ですか?ちょっと興味があるんだけど.. – alapeno

3

retronymsbt-onejar pluginを使用して、すべての依存関係が含まれる実行可能なjarを作成しました(Mavenの場合はAssembly pluginとよく似ています)。それは非常にシンプルでよく書かれています。

+0

+1 retronymプラグインは依存関係を解凍しないので、私が提案したものよりもよく見えます。 –

2

すべてのアプリケーションと依存関係を含む 'fat' jarファイルを作成する場合は、sbt-assembly pluginを使用できます。それでは、標準なしでjarとしてアプリケーションを実行できます。

1

タスクを作成して、アプリケーションを起動するファイルを作成することもできます。 @KiptonバロスはHow do I run an sbt main class from the shell as normal command-line program?でこれを投稿:

val MkUnixlauncher = config("mkunixlauncher") extend(Compile) 
    val mkunixlauncher = TaskKey[Unit]("mkunixlauncher") 
    val mkunixlauncherTask = mkunixlauncher <<= (target, fullClasspath in Runtime) map { (target, cp) => 
    def writeFile(file: File, str: String) { 
     val writer = new PrintWriter(file) 
     writer.println(str) 
     writer.close() 
    } 
    val cpString = cp.map(_.data).mkString(System.getProperty("path.separator")) 
    val launchString = """ 
CLASSPATH="%s" 
scala -usejavacp -Djava.class.path="${CLASSPATH}" "[email protected]" 
""".format(cpString) 
    val targetFile = (target/"scala-sbt").asFile 
    writeFile(targetFile, launchString) 
    targetFile.setExecutable(true) 
    } 

をクラスパスは、アプリケーションを実行するために適切に設定したターゲット・ディレクトリにScalaの-SBTという名前のファイルを作成すること。微妙な味わい。

+0

これは私が達成しようとしていたものに最も近いものです。 – Thakur

関連する問題