1

私はsbt-start-scriptプラグインを使用してプロジェクトをビルドしています (ただし、質問はそれよりも一般的に当てはまると思いますが、たまたま具体的な例を提供しているだけです)。設定の値を変更したいstart-script-name(設定を定義する関連ソース ファイルは、ここにあります)。ドキュメントに従って、次の行を my に追加しました。build.sbtこれにより、期待どおりに開始スクリプトが作成されます。

import com.typesafe.sbt.SbtStartScript
seq(SbtStartScript.startScriptForClassesSettings: _*)

start-script-nameしかし、別の場所に書き込むように設定 (紛らわしく定義されている)を変更したいのですがstartScriptFile、これは予想以上にイライラさせられました。

設定は、次を使用して正常に表示されますinspect

[ctdrest] $ inspect uses start-script-name
[info]
[info]  compile:start-script-for-jar
[info]  compile:start-script-not-defined
[ctdrest] $ inspect definitions start-script-name
[info]
[info]  *:start-script-name
[ctdrest] $ inspect tree start-script-name
[info] *:start-script-name = target/start
[info]   +-*:target = target
[info]     +-*:base-directory = /Users/amack/Coding/ctdrest
[info]       +-*:this-project = Project(id: CTDRestful, base: /Users/amack/Coding/ctdrest, aggreg..
[info]

しかしsbt、値を設定しようとすると文句を言います:

[ctdrest] $ set startScriptFile := "bar"
<set>:1: error: not found: value startScriptFile
startScriptFile := "bar"
^
<set>:1: error: reassignment to val
startScriptFile := "bar"
            ^
[error] Type error in expression

とてつもなく明白な何かが欠けていると思いますが、SBT設定ドキュメントを何度も検索して調べても、何も解決しませんでした。

4

1 に答える 1

1

かなり悲鳴を上げるほど明白です。この特定のケースでは、ソースから、元のキーがネストされたオブジェクトで定義されていることがわかりますStartScriptKeys

 object StartScriptKeys {
        val startScriptFile = SettingKey[File]("start-script-name")
        ...
 }

したがって、次のようにします。

[ctdrest] $ set StartScriptKeys.startScriptFile <<= target / "bar"
[info] Defining *:start-script-name
[info] The new value will be used by compile:start-script-for-jar, compile:start-script-not-defined
[info] Reapplying settings...
[info] Set current project to ctdrest (in build file:/Users/amack/Coding/ctdrest/)

これは、設定名が与えられた場合に値を設定する方法を決定するという、より一般的な問題には対処していませんstart-script-name。この点に関しては、SBT の方が役立つように思われます。

編集

プラグイン設計ガイドによると、これは追加することでより慣用的に処理されます

import StartScriptKeys._

build.sbt修飾子なしで変更できますがstartScriptFile、SBT コンソールでは何らかの理由で修飾子が必要です。

于 2013-06-14T05:55:25.310 に答える