2015-11-24 8 views
5

を構築:sbt package複数のターゲット・ディレクトリ私は、この構造でのsbtプロジェクト持ち

. 
├── build.sbt 
├── project 
│   ├── build.properties 
│   └── plugins.sbt 
└── src 
    ├── main 
    │   └── java 
    │    └── smcho 
    │     └── App.java 
    └── test 
     └── java 
      └── smcho 
       └── AppTest.java 

を、私は3つのターゲットディレクトリを持っている、とTARGET2宛先2、および宛先類似した構造を有しています。

. 
├── build.sbt 
├── project 
│   ├── build.properties 
│   ├── plugins.sbt 
│   ├── project 
│   │   └── target <---------- TARGET 1 
│   └── target  <---------- TARGET 2 
│    ├── config-classes 
│    ├── resolution-cache 
│    ├── scala-2.10 
│    └── streams 
├── src 
│   ├── main 
│   │   └── java 
│   └── test 
│    └── java 
└── target <--------------- TARGET 3 
    ├── resolution-cache 
    │   ├── com.example 
    │   └── reports 
    ├── scala-2.11 
    │   ├── classes 
    │   └── hello_2.11-0.1.0.jar 
    └── streams 
     ├── $global 
     └── compile 

なぜそうですか?興味深いことに、sbt cleanは対象のディレクトリを削除しないので、簡単なターゲットを1つ作成して簡単に削除できますか?

これはbuild.sbtです:

lazy val hello = taskKey[Unit]("An example task") 
val junit = "junit" % "junit" % "4.11" % "test" 

lazy val commonSettings = Seq( 
    organization := "com.example", 
    version := "0.1.0", 
    scalaVersion := "2.11.4" 
) 

lazy val root = (project in file(".")). 
    settings(
     commonSettings: _* 
). 
    settings(
     hello := { println("Hello!") }, 
     name := "hello", 
     libraryDependencies += junit 
) 

答えて

12

SBT内のすべてのプロジェクトがtargetディレクトリがあります。コンパイルされたクラスや他の生成されたものがどこに行くのですか。あなたのroot

は、プロジェクトで、あなたのダイアグラムでTARGET 3は、そのターゲットです。

あなたのビルド定義(projectディレクトリ)もプロジェクトです。 SBTを使用すると、ビルド関連のタスクや設定を実装するためのスカラコードを記述することができます。コンパイルされたコードはどこかに行かなければならない。それはTARGET 2 - project/targetという名前のディレクトリにあります。

SBTのビルド定義は再帰的に使用できます。つまり、ビルド定義に独自のビルド定義を含めることができます。プラグイン(project/plugins.sbtで定義されている)を使用しているため、ビルド定義にはビルド定義が必要です。このビルド定義は、図のproject/project/target別名TARGET 1にコンパイルされます。あなたはSBTコンソールでcleanを実行すると

、それは現在のプロジェクトのターゲットディレクトリからファイルをきれいにします。私はそれがディレクトリ全体を削除するつもりはないと思うが、私は間違っている可能性があります。いずれにしても、rootプロジェクトを選択している間にcleanを実行すると、rootプロジェクトのtargetにしか影響しません。

SBTコンソールでは、reload pluginsまたはreload returnを実行すると、現在のプロジェクトのビルド定義との間でジャンプすることができます。そのコンテキスト内でcleanを呼び出すと、それぞれtargetがクリーンになります。シングル、簡単に除去ディレクトリにそれらを組み合わせることについては

、私はその中で値を参照してくださいわかりません。数年前からSBTを使用していたため、さまざまなtargetディレクトリが本当に途中にありませんでした。私は昨年ほどで目標ディレクトリを一度に削除したかったとは思わない。

+2

そして、実際にすべての生成されたファイルを絶対に消去したいのであれば、それは 'git clean'のためです。 –

関連する問題