質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Q&A

解決済

1回答

574閲覧

sbt newすると、targetディレクトリが生成されるのは普通ですか?

grovion

総合スコア145

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

0グッド

1クリップ

投稿2017/09/25 22:54

編集2017/09/29 03:19

質問内容

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

自分がやった手順(日本語バージョン)

  1. 空のディレクトリ内で、sbt new scala/scala-seed.g8をする
  2. 適当なプロジェクト名(今回はmy-sbt-projectとします)を入力する
  3. 空だったディレクトリに、./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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

何もないディレクトリでsbt実行して何もせずにexitするだけでtargetディレクトリが作成されてしまうので普通なんだと思います。

shell

1 $ mkdir hoge 2 $ cd hoge 3 $ ls -la 4total 0 5 $ sbt 6sbt:hoge> exit 7 $ ls 8target

投稿2017/09/26 03:31

rysh

総合スコア874

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grovion

2017/09/26 03:35

本当ですね、何もせずにexitだけで、`./target`が生成されていたのですね、むやみに`sbt`コマンド叩くと勝手に生成されて困りますね。 もし、生成されないようにしたり、globalなtargetを使うみたいな、なにか対処法をご存じの方いらしたら、教えてください
grovion

2017/09/29 03:13

ありがとうございます。指示通りにやってうまくいくことができました!ちょうど一日前(2017/09/28)に1.1.0のマイルストーンにつかされたissueのようなので、現段階ではこの対処法がベストみたいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問