2012-07-25 7 views
14

私は非常に最初のプレイアプリケーションを混合ビルド環境に設定しています。私の会社はすべて(これまでのところ)mavenを使用しています。私は、私のプレイ・アプリケーションを残りの人工物とうまくやりとりするように努めています。Play 2.0とSNAPSHOTの依存関係

これは、mavenと同様にSNAPSHOTを処理するための方法ですか?つまり、リモートのリポジトリから常に更新するか(ビルドワーカーなど)、ローカルを使用するかのどちらかです。依存関係が「期限切れになるまで」m2リポジトリを再起動し、サーバーからリフレッシュします。

私はBuild.scalaにアーティファクトのSNAPSHOT依存関係を宣言しています。この依存関係のローカル更新を私のプレイプロジェクトに見せたいと思います。 Mavenの側では、私は(もちろん)を構築し、(〜/ .m2 /リポジトリで)私の地元のMavenリポジトリに私の外部のアーティファクトをインストールし、次の

mvn clean install 

を行います。これらの変更を私のプレイプロジェクトですぐに見ることができますが、SNAPSHOTをキャッシュしないようにsbt/playに指示する方法はわかりません。私が何をするにしても、この依存関係は決して再生されません。実際のプレイ・アイビー・キャッシュに入り、変更を手に取って依存関係を削除する必要があります。理想的には、私はsbt/ivyをローカルmavenリポジトリへのパスを解決し、内部的にキャッシュしないようにしたいと思います。私は遊びでビルドを実行すると、それが適切にこのレポを使用しますが、その後、ツタキャッシュに結果をキャッシュし、私のBuild.scala

val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
    resolvers += "Local Maven Repository" at "file://" + Path.userHome.absolutePath + "/.m2/repository", 
    testOptions in Test := Nil 
) 

に次のように持っています。私はIvy/sbtにこれをしないと言うことができますか?おそらくivysettings.xmlの何か?

+0

あなたの試しはきれいでしたか? –

+0

http://stackoverflow.com/questions/8224907/re-download-a-snapshot-version-of-a-dependency-using-sbtは役に立ちますか? –

+1

はい - 私は考えることのできるすべての組み合わせを試しました。バニラプレイ2.0のインストールではスナップショットがキャッシュされ、手動で削除する必要があります。 sbt 0.11を使用すると(インストールされていない場合も同じです)さらに、最新のPlay 2.1 SNAPSHOTでsbt 0.12を使用すると、これも表示されます。私が何をするにしても、SNAPSHOTは〜/ .ivy2/cacheにキャッシュされ、sbt/play呪文の方法ではsbt/playがこのスナップショットをivyキャッシュで更新することはできません。 – dpratt

答えて

1

あなたは使用することができます。

  • play reload //現在のアプリケーションのビルド・ファイルをリロード
  • play update //アプリケーションをビルドする前に、アプリケーションの依存関係に

を更新します。 SNAPSHOT依存関係をキャッシュしないようにsbtを構成できるかどうかはわかりませんが、ビルドプロセスをスクリプト化して依存関係を強制的にリロードすることができます。

5

@kheraud - >クリーン/リロード/更新 - > SBTはとlocalYそれをキャッシュ動作しませんし、ローカルのMavenに新しいスナップショットのために再び

@dpratチェックしない - >私は、Webでソリューションを探してきたがそしてより多くの何かを発見していない:( 私はあきらめた - ちょうど私がこの帰さを見てきたあなたはそれを簡素化し、スクリプトの他の場所

rm -rf ~/.ivy2/cache/your.package.foo 
play update compile 
2

を作ることができますツタのキャッシュにローカルのパッケージを削除し、play update を行いますSBT欠陥https://groups.google.com/forum/?fromgroups=#!topic/play-framework/O7_cAdUWQII

1つの解決策はNexusを使用することです。 MavenからNexusに展開する必要があります。 mvnの代わりにネクサスパスを使用する必要があります。 nexusをインストールして実行する必要があります。

nexusをインストールするには、sonatypeに移動してダウンロードします。ファイルのパーミッションを見る(指示を読んでください)が、簡単です。 〜/ .m2/settings.xmlに資格情報を入れる必要があります。デフォルトはadmin、admin123です。

<settings> 
    <servers> 
    <server> 
     <id>snapshots</id> 
     <username>admin</username> 
     <password>admin123</password> 
    </server> 
    </servers> 
</settings> 

mavenデプロイメントは、あなたにネクサスによって与えられます。:

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>http://0.0.0.0:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <url>http://0.0.0.0:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

次にmvn deployがあなたのリソースをそこに置きます。プレイのsbt使用中のその後

resolvers += "Local Nexus Repository" at "http://0.0.0.0:8081/nexus/content/repositories/snapshots" 

あなたはまだ、プレーを停止プレイアップデートを使用して、プレイを再起動する必要があります。

0

私はこれがどういう仕組みか分かりませんが、 "別の人が私に言いました" - これは私がこれを参照している程度です - プレイインストールの "リポジトリ"フォルダを掃除すると助けになるかもしれません。

rm -rf /opt/play/repository/cache/com.mycompany 
play clean 
play update 
play run 

私のために働くようだ:

は、私がこれを行う小さな「refresh.sh」スクリプトを持っています。 "/ opt/play"はプレイインストールがある場所で、 "com.mycompany"は更新する場所です。

私はこれが正しいことを言っているわけではありませんが、他に何も作用しなければショットに値するかもしれません。

0

sbtバージョン0.13.6(2014年8月)の時点で、SNAPSHOT解像度を制御するために、Build.scala/build.sbtにビルド設定フラグupdateOptionsを使用できます。この新機能について

updateOptions := updateOptions.value.withLatestSnapshots(false/true) 

ドキュメント詳細はgithubの上pull request対応here

です。

関連する問題