14

混合ビルド環境で初めてのプレイ アプリをセットアップしています。私の会社は (これまでのところ) すべてに maven を使用しており、プレイアプリが残りのアーティファクトとうまくやり取りできるようにしようとしています。

ivy/sbt/play に maven と同様の方法で SNAPSHOT を処理させる方法はありますか?依存関係は「期限切れ」になり、サーバーから更新されます。

アーティファクトの Build.scala で SNAPSHOT 依存関係を宣言しました。この依存関係のローカル更新が私の play プロジェクトに表示されるようにしたいと考えています。Maven側では、次のことを行います

mvn clean install

これは (もちろん) 外部アーティファクトをビルドして、ローカルの Maven リポジトリ (~/.m2/repository) にインストールします。これらの変更を自分の play プロジェクトにすぐに反映させたいのですが、sbt/play に SNAPSHOT をキャッシュしないように指示する方法がわかりません。私が何をしても、この依存関係はプレイ中に更新されることはありません。実際のプレイ アイビー キャッシュに移動し、変更を取得するには手動で依存関係を削除する必要があります。理想的には、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に何か?

4

5 に答える 5

6

@kheraud -> clean /reload/ update -> 動作しない

@dprat - >私はウェブで解決策を探していましたが、それ以上のものは見つかりませんでした:(あきらめました-アイビーキャッシュのローカルパッケージを削除するだけで、play update それを簡素化してスクリプトを作成できますか

rm -rf ~/.ivy2/cache/your.package.foo
play update compile
于 2013-03-11T16:13:59.327 に答える
2

他の場所では、これが SBT の欠陥に起因することを見てきましたhttps://groups.google.com/forum/?fromgroups=#!topic/play-framework/O7_cAdUWQII

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

nexus をインストールするには、sonatype に移動してダウンロードします。ファイルのアクセス許可に注意してください (手順をお読みください) が、簡単です。クレデンシャルを ~/.m2/settings.xml に入れる必要があります。デフォルトは admin、admin123 です。

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

maven deploy は nexus によって提供されます。例:

<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"

プレイを停止し、プレイ アップデートを使用して、プレイを再開する必要があります。

于 2013-05-08T14:16:55.817 に答える
1

以下を使用できます。

  • play reload// 現在のアプリケーション ビルド ファイルをリロードします
  • play update// アプリケーションの依存関係を更新します

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

于 2012-07-26T08:13:39.997 に答える
0

これがどのように機能するかはわかりませんが、「別の人が私に言った」-はい、これについての私の参照の範囲です-プレイインストールの「リポジトリ」フォルダーを消去すると役立つ場合があります。

これを行う小さな「refresh.sh」スクリプトがあります。

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

それは私のために働くようです。"/opt/play" は Play のインストール先で、"com.mycompany" は更新する必要がある場所です。

これが正しいと言っているわけではありませんが、他に何もうまくいかない場合は、試してみる価値があるかもしれません.

于 2014-07-03T13:02:51.640 に答える
0

sbt バージョン 0.13.6 (2014 年 8 月) の時点で、ビルド設定フラグを使用updateOptionsしてBuild.scala/build.sbt、SNAPSHOT 解決を制御できます。

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

この新機能に関するドキュメントはこちら

詳細については、対応する github のプル リクエストを参照してください。

于 2016-10-17T07:29:01.887 に答える