1. sbt ランチャーの設定

sbt ランチャーの設定 

ランチャーは、以下のいずれかの方法で、優先順位の低い順に設定できます。

  • ランチャJAR内の `/sbt/sbt.boot.properties` ファイルを置き換えます。
  • `sbt.boot.properties` という名前の設定ファイルをクラスパスに配置します。`/sbt` プレフィックスなしでクラスパスのルートに配置します。
  • コマンドラインで、パスまたは絶対URIとして、代替設定の場所を指定します。これは、システムプロパティ `sbt.boot.properties` として場所を指定するか、`@` で始まるランチャーの最初の引数として指定することで実行できます。システムプロパティの方が優先順位が低くなります。相対パスの解決は、まず現在の作業ディレクトリに対して、次にユーザーのホームディレクトリに対して、最後にランチャJARを含むディレクトリに対して試行されます。

これらの試行がいずれも成功しない場合は、エラーが生成されます。

 

アプリケーションとしての sbt のデフォルト設定ファイルは次のようになります。

[scala]
  version: ${sbt.scala.version-auto}

[app]
  org: ${sbt.organization-org.scala-sbt}
  name: sbt
  version: ${sbt.version-read(sbt.version)[0.13.5]}
  class: ${sbt.main.class-sbt.xMain}
  components: xsbti,extra
  cross-versioned: ${sbt.cross.versioned-false}

[repositories]
  local
  typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
  maven-central
  sonatype-snapshots: https://oss.sonatype.org/content/repositories/snapshots

[boot]
  directory: ${sbt.boot.directory-${sbt.global.base-${user.home}/.sbt}/boot/}

[ivy]
  ivy-home: ${sbt.ivy.home-${user.home}/.ivy2/}
  checksums: ${sbt.checksums-sha1,md5}
  override-build-repos: ${sbt.override.build.repos-false}
  repository-config: ${sbt.repository.config-${sbt.global.base-${user.home}/.sbt}/repositories}

ランチャー設定のすべてのセクションを詳しく見てみましょう。

1. Scala 設定 

`[scala]` セクションは、Scala のバージョンを設定するために使用されます。1つのプロパティがあります。

  • `version` - アプリケーションが使用する Scala のバージョン、またはアプリケーションがクロスバージョン化されていない場合は `auto` です。
  • `classifiers` - 解決する追加の Scala 成果物 (例: ソース) のリスト (オプション)。

2. アプリケーションの識別 

`[app]` セクションは、ランチャーが Ivy 依存関係マネージャーを使用してアプリケーションをどのように検索するかを設定します。次のプロパティで構成されます。

  • `org` - Ivy モジュールに関連付けられた組織。(Maven の用語では `groupId`)
  • `name` - Ivy モジュールの名前。(Maven の用語では `artifactId`)
  • `version` - Ivy モジュールのリビジョン。
  • `class` - アプリケーションへの「エントリポイント」の名前。エントリポイントは、次のいずれかの条件を満たすクラスでなければなりません。

    • `xsbti.AppMain` インターフェースを拡張します。
    • `xsbti.ServerMain` インターフェースを拡張します。
    • シグネチャ `static void main(String[])` のメソッドを含みます。
    • シグネチャ `static int main(String[])` のメソッドを含みます。
    • シグネチャ `static xsbti.Exit main(String[])` のメソッドを含みます。
  • `components` - Ivy が解決する必要がある追加コンポーネントのオプションのリスト。
  • `cross-versioned` - このアプリケーションがどのように公開されるかを示すオプションの文字列。`app.cross-versioned` が `binary` の場合、解決されるモジュールIDは `{app.name+'_'+CrossVersion.binaryScalaVersion(scala.version)}` です。`app.cross-versioned` が `true` または `full` の場合、解決されるモジュール ID は `{app.name+'_'+scala.version}` です。`cross-versioned` の場合、`scala.version` プロパティを指定する必要があり、`auto` にすることはできません。
  • `resources` - アプリケーションのクラスパスに追加する必要がある JAR ファイルのオプションのリスト。
  • `classifiers` - このアプリケーションで解決する必要がある追加の classifiers (例: ソース) のオプションのリスト。

3. リポジトリセクション 

`[repositories]` セクションは、Ivy がアプリケーションをどこでどのように検索するかを設定します。各行は、Ivy が検索するリポジトリを示します。

  • 注: このセクションでは、Ivy が検索するデフォルトの場所を設定しましたが、これはユーザー設定でオーバーライドできます。*

一般的なリポジトリに使用できる組み込み文字列がいくつかあります。

  • `local` - ローカル Ivy リポジトリ `~/.ivy2/local`。
  • `maven-local` - ローカル Maven リポジトリ `~/.m2/repository`。
  • `maven-central` - Maven Central リポジトリ `repo1.maven.org`。

組み込みリポジトリに加えて、他のリポジトリは次の構文を使用して設定できます。

name: url(, pattern)(,bootOnly)(,descriptorOptional)(,skipConsistencyCheck)(,allowInsecureProtocol)

`name` プロパティは、Ivy がこの場所から解決されたモジュールをキャッシュするために使用する識別子です。`name` はすべてのリポジトリで一意である必要があります。

`url` プロパティは、Ivy がモジュールを検索するベース `url` です。

`pattern` プロパティは、Ivy がモジュールを *どのように* 検索するかを指定するオプションです。デフォルトでは、ランチャーはリポジトリが Maven スタイルの形式であると想定します。

`bootOnly` 文字列は、Ivy に起動時にのみこのリポジトリを使用するように指示するために使用されます。つまり、sbt 自体の JAR とプラグインの JAR を見つけるためです。`bootOnly` 文字列を持つリポジトリは、ビルド時の依存関係の解決には使用されません。

`skipConsistencyCheck` 文字列は、Ivy に解決したファイルのチェックサムと署名を検証しないように指示するために使用されます。

`allowInsecureProtocol` 文字列は、このリポジトリが `http://` であることについての警告を出力しないように SBT に指示します。HTTP リポジトリは重大なセキュリティリスクをもたらす可能性があるため、使用する前に慎重に検討してください。

4. ブートセクション 

`[boot]` セクションは、sbt ランチャーがキャッシュと設定情報をどこに保存するかを設定するために使用されます。次のプロパティで構成されます。

  • `directory` - ここで定義されたディレクトリは、解決されたランチャーのすべてのキャッシュされた JAR を格納するために使用されます。
  • `properties` - (オプション) `read` 変数に使用するプロパティファイル。

5. Ivy セクション 

`[ivy]` セクションは、アプリケーションを解決するための Ivy 依存関係マネージャーを設定するために使用されます。次のプロパティで構成されます。

  • `ivy-home` - Ivy のホームディレクトリ。これは、ivy-local リポジトリが配置される場所と、Ivy キャッシュが格納される場所を決定します。デフォルトは `~/.ivy2` です。
  • `checksums` - Ivy が成果物が正しく解決されたことを確認するために使用するチェックサムのコンマ区切りリスト (例: md5 または sha1)。
  • `override-build-repos` - これが設定されている場合、`xsbti.Launcher` インターフェースの `isOverrideRepositories` メソッドはその値を返します。このメソッドの使用はアプリケーション固有ですが、sbt の場合は、ランチャーのリポジトリの設定がビルドで使用される設定をオーバーライドすることを示します。アプリケーションは、可能な場合はこの規則を尊重する必要があります。
  • `repository-config` - これは、Ivy リポジトリも設定できる設定場所を指定します。このファイルが存在する場合、その内容は `[repositories]` セクションをオーバーライドします。

6. サーバーセクション 

ランチャーの `--locate` 機能を使用する場合、このセクションはサーバーの起動方法を設定します。次のプロパティで構成されます。

  • `lock` - 実行中のサーバーへのアクセスを制御するファイル。このファイルには、サーバーで使用されるアクティブなポートが含まれ、ロックをサポートするファイルシステムに配置する必要があります。
  • `jvmargs` - サーバーの起動時に使用された JVM 引数を改行で区切って含むファイル。
  • `jvmprops` - サーバーでオーバーライドプロパティを定義するプロパティファイルの場所。このファイルで定義されているすべてのプロパティは、`-D` Java プロパティとして設定されます。

変数置換 

プロパティ値には、変数置換を含めることができます。変数置換は以下のいずれかの形式を取ります。

  • ${variable.name}
  • ${variable.name-default}

ここで、variable.name はシステムプロパティの名前です。その名前のシステムプロパティが存在する場合、値が置換されます。存在せず、デフォルト値が指定されている場合は、デフォルト値内で変数を再帰的に置換した後に、デフォルト値が置換されます。システムプロパティが存在せず、デフォルト値が指定されていない場合は、元の文字列は置換されません。

特別な変数置換もあります。

read(property.name)[default]

これは、boot.properties で設定されたファイルで値を探します。 boot.properties ファイルが設定されていない場合、またはプロパティが存在しない場合は、デフォルト値が選択されます。

構文 

設定ファイルは行ベースで、UTF-8 エンコーディングで読み込まれ、以下の文法で定義されます。 'nl' は改行またはファイルの終わりを示し、'text' は括弧や角括弧などの周囲の区切り文字を含まない、改行のないプレーンテキストです。

configuration: scala app repositories boot log appProperties
scala: "[" "scala" "]" nl version nl classifiers nl
app: "[" "app" "]" nl org nl name nl version nl components nl class nl crossVersioned nl resources nl classifiers nl
repositories: "[" "repositories" "]" nl (repository nl)*
boot: "[" "boot" "]" nl directory nl bootProperties nl search nl promptCreate nl promptFill nl quickOption nl
log: "[" "log" "]" nl logLevel nl
appProperties: "[" "app-properties" "]" nl (property nl)*
ivy: "[" "ivy" "]" nl homeDirectory nl checksums nl overrideRepos nl repoConfig nl
directory: "directory" ":" path
bootProperties: "properties" ":" path
search: "search" ":" ("none" | "nearest" | "root-first" | "only" ) ("," path)*
logLevel: "level" ":" ("debug" | "info" | "warn" | "error")
promptCreate: "prompt-create"  ":"  label
promptFill: "prompt-fill" ":" boolean
quickOption: "quick-option" ":" boolean
version: "version" ":" versionSpecification
versionSpecification: readProperty | fixedVersion
readProperty: "read"  "(" propertyName ")"  "[" default "]"
fixedVersion: text
classifiers: "classifiers" ":" text ("," text)*
homeDirectory: "ivy-home" ":" path
checksums: "checksums" ":" checksum ("," checksum)*
overrideRepos: "override-build-repos" ":" boolean
repoConfig: "repository-config" ":" path
org: "org" ":" text
name: "name" ":" text
class: "class" ":" text
components: "components" ":" component ("," component)*
crossVersioned: "cross-versioned" ":"  ("true" | "false" | "none" | "binary" | "full")
resources: "resources" ":" path ("," path)*
repository: ( predefinedRepository | customRepository ) nl
predefinedRepository: "local" | "maven-local" | "maven-central"
customRepository: label ":" url [ ["," ivyPattern] ["," artifactPattern] [", mavenCompatible"] [", bootOnly"]]
property: label ":" propertyDefinition ("," propertyDefinition)*
propertyDefinition: mode "=" (set | prompt)
mode: "quick" | "new" | "fill"
set: "set" "(" value ")"
prompt: "prompt"  "(" label ")" ("[" default "]")?
boolean: "true" | "false"
nl: "\r\n" | "\n" | "\r"
path: text
propertyName: text
label: text
default: text
checksum: text
ivyPattern: text
artifactPattern: text
url: text
component: text