質問内容
sbt new <template-name>
すると、プロジェクト名で指定したディレクトリと、./target
というディレクトリが生成されるのは、sbtの通常の挙動ですか?
以下に、実際に起こる現象を自分がやった手順を日本語で書きます。ターミナルに打ったコマンドバージョンは、その次書きます。
環境
$ uname -a Darwin Redstone-no-iMac.local 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64
$ sbt sbt-version [info] Loading global plugins from /Users/Redstone/.sbt/0.13/plugins/project [info] Loading global plugins from /Users/Redstone/.sbt/0.13/plugins [info] Set current project to my_empty_dir (in build file:/Users/Redstone/dev/scala/sbt-new-prac/my-sbt-project/my_empty_dir/) [info] 0.13.13
自分がやった手順(日本語バージョン)
- 空のディレクトリ内で、
sbt new scala/scala-seed.g8
をする - 適当なプロジェクト名(今回はmy-sbt-projectとします)を入力する
- 空だったディレクトリに、
./my-sbt-project
ディレクトリと./target
ディレクトリが生成される
./my-sbt-project
ディレクトリが生成されるのは、わかるのですが、./target
ディレクトリが生成される理由がわかりません。
自分がやった手順(コマンドバージョン)
日本語バージョンと同じことですが、コマンドのほうが再現性があるので、手順コマンドバージョンも書かせていただきます。
sh
1# 空のディレクトリを生成 2$ mkdir my_empty_dir 3# 空ディレクトリに入る 4$ cd my_empty_dir 5# sbt newして、プロジェクト名をmy-sbt-projectにする 6$ sbt new scala/scala-seed.g8 7[info] Loading global plugins from... 8...(出力略)... 9name [Scala Seed Project]: my-sbt-project <<<== ここは自分で入力しました 10# 出来上がったディレクトリを見る(targetディレクトリがある) 11$ ls 12my-sbt-project target 13# カレントの階層をtreeで見てみる(treeはbrew install treeです) 14$ tree . 15. 16├── my-sbt-project 17│ ├── build.sbt 18│ ├── project 19│ │ ├── Dependencies.scala 20│ │ └── build.properties 21│ └── src 22│ ├── main 23│ │ └── scala 24│ │ └── example 25│ │ └── Hello.scala 26│ └── test 27│ └── scala 28│ └── example 29│ └── HelloSpec.scala 30└── target 31 └── streams 32 └── $global 33 ├── ivyConfiguration 34 │ └── $global 35 │ └── streams 36 │ └── out 37 └── projectDescriptors 38 └── $global 39 └── streams 40 └── out 41 4218 directories, 7 files
やはり、./my-sbt-project
ディレクトリが生成されるのはわかるのですが、./target
ディレクトリが生成される理由がわかりません。
これが、通常のsbtの挙動なんですか?もしそうなら、./target
ディレクトリはなんのために必要ですか?
注意
今回出てくる./target
ディレクトリは、sbt run
した後に自動生成される、my-sbt-project/target
でもmy-sbt-project/project/target
のことではありません。
(追記)対処法
@rysh さんに対処法を回答したいただいたので、ここで紹介します。
(実際の回答ではなくコメントなので、目につきにくいと思うので、同じく困ってる人が来たとき、わかりやすくしたいと思って書きました)
以下の支持に従うとうまくいきます。
https://github.com/sbt/sbt/issues/2835
具体的には、
~/.sbt/0.13/target-relocate.sbt
というファイルを以下の内容で保存すればOKです(ぼくの場合はもともとなかったので、新規ファイル作成しました)。
(@djspiewak さんのコメントの内容から引用しています)
scala
1import java.io.File 2 3target := { 4 val buildSbt = baseDirectory.value / "build.sbt" 5 val projectSbt = baseDirectory.value / "project.sbt" 6 val project = baseDirectory.value / "project" 7 8 if (buildSbt.exists() || projectSbt.exists() || project.exists()) 9 target.value 10 else 11 new File("/tmp") / "sbt" / sbtVersion.value / "target" 12}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/26 03:35
2017/09/29 02:14
2017/09/29 03:13