2011-10-21 3 views
6

私が開発をしているとき依存関係を変更する必要があることがよくありますが、変更を展開する準備ができていません。例えば、私はプロジェクトFooで作業しています。私は共通ライブラリにメソッドを追加する必要があることを認識しています。この変更を社内のリポジトリに展開する前に、共通ライブラリ(mvn install)に変更をインストールし、Fooを再コンパイルしてローカルリポジトリに共通ライブラリを使用するようにします(すべてのSNAPSHOTバージョンを使用しています)。なぜローカルリポジトリの前に内部リポジトリを使用するのですか?

私の共通ライブラリであるFooを再コンパイルすると、新しい共通ライブラリは使用されません。内部リポジトリには共通ライブラリの最新のSNAPSHOTがそのまま使用されます。変更された共通ライブラリをデプロイすると、Fooはそれを直ちに取得します。

どうすればmavenをローカルのリポジトリで最初に探すことができますか?

更新:ファイルがローカルリポジトリにインストールされると、ファイル名はfoo-1.0.0-SNAPSHOT.jarになりますが、展開するとタイムスタンプfoo-1.0.0-20111104.191316-23.jarが取得されます。私はこれが、リモートアーチファクトが毎回引き出される理由だと思う。 mvn installmvn deployのように機能していない理由は何ですか?デプロイメント用に設定されたスナップショットリポジトリがあるという事実と関係がありますか?

+0

[settings.xml](http://maven.apache.org/settings.html)に、存在しない場所を示す 'localRepository'がありますか? – millhouse

+0

システムの日付と社内のレポ(Nexusなど)システムの日付を比較します。それが先行すれば、そのタイムスタンプは "勝つ" – millhouse

答えて

3

デフォルトでは、MavenはSNAPSHOT成果物の新しいバージョンを1日1回確認します。このチェックを行うと、ローカルのものより新しいリモートスナップショットをSNAPSHOTSからダウンロードします。あなたの成果物タイムスタンプが同期しておらず、あなたがMavenの更新ポリシーを無効にする何かをしている場合(calling it with -Uまたはsetting the udpatePolicyが「常に」になっている)、そうでなければ、アーティファクトをインストールするローカルリポジトリは、それに続いてMavenが実行されます。あなたが記述しているのは、典型的なMavenの動作ではありません。より良い答えを得るには、あなたの質問に詳細を記してください。

一般的なアーティファクトをインストールした後、次にFooをコンパイルすると、Mavenは再び共通のアーティファクトをダウンロードしますか?もしそうなら、それは本当にリモートからそれを取得しており、あなたはあなたのアップデート設定を確認する必要があります。そうでなければ、あなたはローカルで奇妙なことが起こっている。

+0

おかげでライアンは、明らかに誰も私が何をしているのかを詳しく知ることはできません。これが最初の標準的な動作ではないことを知っておくと、私はさらに調査することができます。 – schmmd

+0

私はいくつかの詳細を追加 - 私の質問の最後に私の更新を参照してください。 – schmmd

+0

しばらくの間、Mavenはタイムスタンプを使用して、リモートリポジトリに配備されたスナップショットバージョンを一意に識別しました。「SNAPSHOT」は、これらのタイムスタンプ付きアーチファクトの最新のエイリアスです。私はそれが始まった2.1.0周りのどこかだったと思いますか?あなたの問題については何も変わりません。 –

0

このオプションを試すことができます。これは私のために働いた。

プロジェクトのメインのpom.xmlで、「スナップショット」が「偽」に設定されています。

<repository> 
    <id>yourRepo</id> 
    <name>Repository</name> 
    <url>http://your.repo.com/repo</url> 
    <snapshots> 
     <enabled>false</enabled> 
    </snapshots> 
</repository> 
関連する問題