37

ScalaプロジェクトをビルドするためのビルドツールとしてSBTを使用しています。

私の問題は、依存関係をユーザーのホームディレクトリにダウンロードするようにSBTを構成できないことです。したがって、Ivyキャッシュディレクトリを別の場所に配置するようにSBTに指示するために、ユーザーごと、またはさらに優れたシステム全体の設定を探しています。

Mavenには、ローカルリポジトリの構成に使用できるユーザーごとのsettings.xmlがあります。

アイビーのキャッシュの場所を上書きする方法についての質問を読みましたか?それは答えですが、プロジェクトごとに設定を構成する方法を説明しているだけのようです。

代替手段がない場合は、プロジェクトごとの設定を選択しますが、上記の質問からの回答が得られませんでした。たとえば、ivysettings.xmlを配置する場所など、いくつかの詳細が最も歓迎されます。プロジェクトのルートディレクトリに配置しましたが、機能しませんでした。

4

7 に答える 7

48

sbt.ivy.homeプロパティは、ソリューションの半分にすぎません。sbtランチャーがsbt自体(およびscalaコンパイラやライブラリなどの関連する依存関係)をダウンロードする場所を制御します。JoachimHoferが指摘したように、プロジェクトによって宣言された依存関係がダウンロードされる場所には影響しません。

その場所を変更するには、プロパティを設定する必要がありivy.homeます。したがって、Joachimの最初のソリューションを拡張するには、両方のシステムプロパティを設定します。

java -Dsbt.ivy.home=/tmp/.ivy2/ -Divy.home=/tmp/.ivy2/ -jar `dirname $0`/sbt-launch.jar "$@"

これらのプロパティを使用して、ランチャーはプロジェクトとsbtの両方の依存関係を/tmp/.ivy2/ディレクトリにダウンロードします。もちろん、それらを別々のディレクトリに配置することもできます。

于 2011-11-05T02:26:13.393 に答える
32

sbt起動シェルスクリプトに環境変数を追加するだけです。

java -Dsbt.ivy.home=/tmp/.ivy2/ ...

公式ドキュメントのライブラリ管理を参照してください。

于 2010-08-01T11:52:14.457 に答える
8

まだ使用していない場合は、sbt-extrasを使用する必要があります。

次に、それは単にあなたがそれを渡すフラグです:

sbt -ivy /path/to/.ivy2
于 2013-12-09T07:35:45.437 に答える
3

ivyファイルの場所

私は通常、 ivy.xmlファイルとivysettings.xmlファイルをビルドファイルと一緒に次のように配置します。

build.xml
ivy.xml
ivysettings.xml

ivyタスクが解決および取得すると、両方のファイルが検出されます。

例えば:

<target name="init" description="--> retrieve dependencies with ivy">
    <ivy:retrieve pattern="lib/[conf]/[artifact].[ext]"/>
</target>

奇妙なことに、それはあなたのために働いていません。

ユーザー固有の設定

いくつかの方法でMaven設定ファイルをエミュレートできます

1)プロジェクトivysettings.xml内にディレクティブを含める

<ivysettings>
    <include file="${user.home}/.ivy2/my-ivysettings.xml"/>
</ivysettings>

2)ビルドファイルから場所を設定します

<target name="init" description="--> retrieve dependencies with ivy">
    <ivy:settings file="${user.home}/.ivy2/my-ivysettings.xml" />
    <ivy:retrieve pattern="lib/[conf]/[artifact].[ext]"/>
</target>

3)これを試したことはありませんが、ANTプロパティを使用してデフォルトの場所を上書きできると思います

ant -Divy.settings.file=$HOME/.ivy2/my-ivysettings.xml
于 2010-06-30T20:13:45.900 に答える
3

Path.userHome.absolutePath以下に示すように、を使用してホームディレクトリを取得できます。

resolvers += Resolver.file("Local", file( Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns)

System.getenv以下に示すように、同じ方法で環境変数を取得して連結することもできると思います。

resolvers += Resolver.file("Local", file( System.getenv("IVY_HOME") + "/whatever/it/is"))(Resolver.ivyStylePatterns)
于 2014-03-04T15:15:56.623 に答える
2

SBTの起動中にキャッシュの場所を編集する方法については、公式ドキュメントのSbtLauncherの構成を参照してください。

基本的に、システム全体で機能させるには、次のことを行う必要があります。

  • sbt.boot.propertiesシステム全体でアクセスできる場所に名前を付けた構成ファイルを配置します(デフォルトのファイルは上のリンクにリストされています)。
  • sbt.boot.properties構成ファイルを指すように設定された追加のシステムプロパティを使用して、ランチャーを呼び出します。
  • cache-directoryエントリ([ivy]セクション内)をツタのキャッシュの場所に設定します。

ただし、残念ながら、この構成は通常のSBTの使用法には引き継がれていないようです。

于 2010-11-08T09:39:36.997 に答える
2
sbt -ivy /tmp/.ivy2 compile

参照:man sbt

オプション:-ivyパス:ローカルIvyリポジトリへのパス(デフォルト:〜/ .ivy2)

于 2017-07-21T11:40:31.750 に答える