3

通常、SBT は./build.sbtおよびでビルド ファイルを探します./project/Build.scala。現在の作業ディレクトリにないプロジェクトをビルドできるように、別のプロジェクト ルートを指定することはできますか? 私は本質的に同等のものを探していmvn -f /path/to/pom.xmlますが、ドキュメントには明らかな答えがありません。

(コンパイル時ではなく実行時にこれを行いたいことに注意してください。基本的に、手動のクラスパスのラングリングが嫌いなsbt run-mainので、プロジェクトから任意のクラスを実行するために使用したいと考えています。さまざまな退屈な理由で、任意からこれを行う必要がある場合がありますコードは作業ディレクトリをプロジェクトディレクトリ以外のものにする必要があるかもしれないので、場所を使用することは私が望むことをしないかもしれません.Mavenではとても些細なことです-おそらく不当に、SBTに単純な同等物があると思いました)cd

4

2 に答える 2

0

この他の回答から発見したように、sbt-start-scriptプラグインは よりも優れたツールですsbt run-main。実行するだけsbt stageで、クラスパスが解決された呼び出しスクリプトをtarget/start. ドキュメントによると、プロジェクト間の依存関係を機能させるには、ビルド ルート ディレクトリから実行する必要がありますが、私の単純なユース ケースでは、これは問題ではないようです。

于 2013-06-13T06:00:05.083 に答える
0

私はこのようなものを持っています。X/build.sbtX/MyOtherDefinitionWithSpecialThing/build.sbt、 にプロジェクト定義がありX/MySuperPublishConfig/build.sbtます。

しかし、この問題に対する私の見方は反対です。./build.sbtの場所を指定する代わりに、./project/Build.scalaリソースへのパスの場所を指定します。結果は同じです。次のようになります。

sourceDirectory <<= (baseDirectory) (_ / ".." / "src")

target <<= (baseDirectory) (_ / ".." / "target")

これにより、複数の定義を持つ単一のプロジェクトを作成できます。これは、ネストされた/階層的なプロジェクトで機能します。しかし、階層プロジェクトにはシンボリック リンク (Linux OS) を使用します。

私の SBT プラグインの 1 つのファイル ツリーがあります。複数のビルド定義と 1 つのみsrc/...

.
|-build.sbt
|-project
|---project
|-----target
|-------...
|---target
|-----...
|-project-0.11
|---build.sbt
|---project
|-----project
|-------target
|---------...
|-----target
|-------...
|-project-0.12
|---build.sbt
|---project
|-----project
|-------target
|---------...
|-----target
|-------...
|-...
|-src
|---main
|-----scala
|-------org
|---------...
|---sbt-test
|-----...
|-target
|---...

これで問題が解決しない場合は、'cd' コマンドを使用したくない理由を詳しく説明してください ;-)

-- 更新されたユース ケースの場合:

私はシェルラッパーを使用しており、すべての SBT プロジェクトでこれへのシンボリックリンクを持っています:

#!/bin/sh
#
here=$(cd $(dirname "$0"); pwd)
if [ ! -e "${here}/build.sbt" ]
then
  echo build.sbt lost
  exit
fi
cd ${here} 

LOCAL_BUILD=true sbt-0.12 "$@"

私は単に/path/to/my/project/sbt 'show name'例として、または/path/to/my/project/sbt run-mainあなたの場合に書いています。

于 2013-05-26T16:52:17.307 に答える