web-dev-qa-db-ja.com

ユーザーごとまたはシステム全体でIvyキャッシュディレクトリを構成する方法

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

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

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

私は質問 Ivy’s Cacheの場所をオーバーライドする方法? を読み、それに対する回答ですが、プロジェクトごとに設定を構成する方法についてのみ説明しているようです。

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

33
Ruediger Keller

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

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

公式ドキュメントの Library Management を参照してください。

30
Joachim Hofer

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/ディレクトリにダウンロードします。もちろん、別のディレクトリに置くこともできます。

42
Mark Tye

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

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

sbt -ivy /path/to/.ivy2
8
opyate

以下に示すように、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)
3
Richard Gomes

Ivyファイルの場所

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

build.xml
ivy.xml
ivysettings.xml

Ivyタスクresolveretrieveは両方のファイルを見つけるはずです。

例えば:

<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
3
Mark O'Connor
sbt -ivy /tmp/.ivy2 compile

リファレンス:man sbt

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

2
Milso

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

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

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

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

2
Joachim Hofer