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

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

ただいまの
回答率

90.34%

  • Scala

    192questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 477

grovion

score 135

 質問内容

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ディレクトリが生成される理由がわかりません

 自分がやった手順(コマンドバージョン)

日本語バージョンと同じことですが、コマンドのほうが再現性があるので、手順コマンドバージョンも書かせていただきます。

# 空のディレクトリを生成
$ mkdir my_empty_dir
# 空ディレクトリに入る
$ cd my_empty_dir
# sbt newして、プロジェクト名をmy-sbt-projectにする
$ sbt new scala/scala-seed.g8
[info] Loading global plugins from...
...(出力略)...
name [Scala Seed Project]: my-sbt-project <<<== ここは自分で入力しました
# 出来上がったディレクトリを見る(targetディレクトリがある)
$ ls
my-sbt-project    target
# カレントの階層をtreeで見てみる(treeはbrew install treeです)
$ tree .
.
├── my-sbt-project
│   ├── build.sbt
│   ├── project
│   │   ├── Dependencies.scala
│   │   └── build.properties
│   └── src
│       ├── main
│       │   └── scala
│       │       └── example
│       │           └── Hello.scala
│       └── test
│           └── scala
│               └── example
│                   └── HelloSpec.scala
└── target
    └── streams
        └── $global
            ├── ivyConfiguration
            │   └── $global
            │       └── streams
            │           └── out
            └── projectDescriptors
                └── $global
                    └── streams
                        └── out

18 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 さんのコメントの内容から引用しています)

import java.io.File

target := {
  val buildSbt = baseDirectory.value / "build.sbt"
  val projectSbt = baseDirectory.value / "project.sbt"
  val project = baseDirectory.value / "project"

  if (buildSbt.exists() || projectSbt.exists() || project.exists())
    target.value
  else
    new File("/tmp") / "sbt" / sbtVersion.value / "target"
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

 $ mkdir hoge
 $ cd hoge
 $ ls -la
total 0
 $ sbt
sbt:hoge> exit
 $ ls
target

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/26 12:35

    本当ですね、何もせずにexitだけで、`./target`が生成されていたのですね、むやみに`sbt`コマンド叩くと勝手に生成されて困りますね。

    もし、生成されないようにしたり、globalなtargetを使うみたいな、なにか対処法をご存じの方いらしたら、教えてください

    キャンセル

  • 2017/09/29 11:14

    こちらに回避方法があるそうです
    https://github.com/sbt/sbt/issues/2835

    キャンセル

  • 2017/09/29 12:13

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

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Scala

    192questions

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