Scalaプロジェクトをビルドするためのビルドツールとして [〜#〜] sbt [〜#〜] を使用しています。
私の問題は、依存関係をユーザーのホームディレクトリにダウンロードするようにSBTを構成できないことです。したがって、SBTにIvyキャッシュディレクトリを別の場所に置くように指示するために、ユーザーごとの、またはより良いシステム全体の設定を探しています。
Mavenには、ローカルリポジトリの設定に使用できるユーザーごとのsettings.xmlがあります。
私は質問 Ivy’s Cacheの場所をオーバーライドする方法? を読み、それに対する回答ですが、プロジェクトごとに設定を構成する方法についてのみ説明しているようです。
代替手段がない場合は、プロジェクトごとの設定を選びますが、上記の質問からの答えが得られませんでした。たとえば、ivysettings.xmlをどこに配置するかなど、さらに詳細な情報があれば大歓迎です。私はそれをプロジェクトのルートディレクトリに入れましたが、機能しませんでした。
環境変数をsbt起動シェルスクリプトに追加するだけです。
Java -Dsbt.ivy.home=/tmp/.ivy2/ ...
公式ドキュメントの Library Management を参照してください。
sbt.ivy.home
プロパティはソリューションの半分にすぎません。 sbtランチャーがsbt自体をダウンロードする場所(およびscalaコンパイラーおよびライブラリーなど)をダウンロードする場所)を制御します。JoachimHoferが指摘したように、プロジェクトによって宣言された依存関係には影響しませんダウンロードしてください。
thatの場所を変更するには、ivy.home
プロパティを設定する必要があります。したがって、Joachimの最初のソリューションを補強するには、両方のシステムプロパティを設定します。
Java -Dsbt.ivy.home=/tmp/.ivy2/ -Divy.home=/tmp/.ivy2/ -jar `dirname $0`/sbt-launch.jar "$@"
これらのプロパティを使用すると、ランチャーはプロジェクトの依存関係とsbtの依存関係の両方を/tmp/.ivy2/
ディレクトリにダウンロードします。もちろん、別のディレクトリに置くこともできます。
以下に示すように、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)
私は通常、次のように、ビルドファイルの隣にivy.xmlおよびivysettings.xmlファイルを配置します。
build.xml
ivy.xml
ivysettings.xml
Ivyタスクresolveとretrieveは両方のファイルを見つけるはずです。
例えば:
<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
sbt -ivy /tmp/.ivy2 compile
リファレンス:man sbt
オプション:-ivy path:ローカルIvyリポジトリーへのパス(デフォルト:〜/ .ivy2)
SBTの起動中にキャッシュの場所を編集する方法については、公式ドキュメントの Sbt Launcher Configuration を参照してください。
基本的に、システム全体で機能させるには、次のことを行う必要があります。
sbt.boot.properties
という名前の設定ファイルをシステム全体のどこかにアクセスできる場所に配置します(デフォルトのファイルは上記のリンクにリストされています)。sbt.boot.properties
を設定ファイルで指定してランチャーを呼び出します。cache-directory
エントリ([ivy]
セクション内)をivyキャッシュの場所に設定します。ただし、この構成は通常のSBTの使用に引き継がれていないようです。