2

単純なMavenリポジトリを内部でホストしていますが、Mavenはそこから新しいスナップショットバージョンを取得していないようです。ローカルのMavenリポジトリは、settings.xmlで次のように構成されます。

<snapshots>
    <enabled>true</enabled>
    <updatePolicy>always</updatePolicy>
</snapshots>

これを「mvn-U」のようなものと組み合わせると、該当する場合、mavenが最新のスナップショットバージョンを取得することを期待します。私が収集すると、mavenはmetadata.xmlの最終変更をチェックし、そこからスナップショットが更新されているかどうかを判断します。ただし、最後に更新されたのはどれかは完全にはわかりません。たとえば、次のmetadata.xmlを取り上げます。

<metadata>
<groupId>com.example</groupId>
<artifactId>example-test</artifactId>
<version>1.0-SNAPSHOT</version>
<versioning>
    <versions>
        <version>1.0-SNAPSHOT</version>
    </versions>
    <snapshot>
        <timestamp>20120427.113221</timestamp>
        <buildNumber>1335519141810</buildNumber>
    </snapshot>
    <lastUpdated>20120427113221</lastUpdated>
</versioning>

MavenはlastUpdatedタグを使用しますか?「最後に変更された」httpヘッダー?snapshot.timestampタグまたは他の何かまだ?

とにかく、私たちが見ている動作は、実際に最新のmetadata.xmlをダウンロードしますが、そこで停止し、スナップショット自体を再ダウンロードしないというものです。

編集:Maven2でオプションだった独自のスナップショット機能がMaven3で必須になっていることに気づきました。Mavenが単に更新されたバージョンを検出していない可能性はありますか?今すぐモジュールからmaven-metadata.xmlをチェックしてください:

<metadata modelVersion="1.1.0">
<groupId>com.example</groupId>
<artifactId>example-test</artifactId>
<version>1.0-SNAPSHOT</version>
<versioning>
    <snapshot>
        <timestamp>20120607.154257</timestamp>
        <buildNumber>1339076577</buildNumber>
    </snapshot>
    <lastUpdated>20120607154257</lastUpdated>
    <snapshotVersions>
        <snapshotVersion>
            <extension>jar</extension>
            <value>1.0-20120607.154257-1339076577</value>
            <updated>20120607154257</updated>
        </snapshotVersion>
    </snapshotVersions>
</versioning>

Mavenはビルド番号をチェックしますか?snapshotVersionの「updated」タグ?

4

2 に答える 2

2

モジュールでローカルで作業していて、実行した場合:

mvn clean install

これにより、ローカルのMavenリポジトリにコピーがインストールされます。このアーティファクトはロックされた状態になります。つまり、metadata * xmlが削除されない限り、リモートロケーションから更新されません。

これはお尻の痛みです。数日以内にこのモジュールでの作業が終了し、他のモジュールでの作業を開始すると、変更が反映されないため、この最初のモジュールに依存します。リモートリポジトリから。

これについては、ここにバグが報告されています。ただし、すぐに修正される可能性は低いです。したがって、この動作について知ることが不可欠です。

于 2012-06-07T07:27:52.903 に答える
1

結局、問題はmetadata.xmlにありました。originelリクエストに記載されているようにモデル1.1.0がサーバーによって生成された場合、mavenはメタデータのみを更新します。古い「1.0.0」モデルに戻すことで、機能します。例metadata.xml:

<metadata modelVersion="1.0.0">
<groupId>com.example</groupId>
<artifactId>example-test</artifactId>
<version>1.0-SNAPSHOT</version>
<versioning>
    <snapshot>
        <timestamp>20120608.103301</timestamp>
        <buildNumber>1339144381</buildNumber>
    </snapshot>
    <lastUpdated>20120608103301</lastUpdated>
</versioning>

障害のある1.1.0metadata.xmlがmavenのエラーなのか、リポジトリのエラーなのかは現時点では不明ですが、少なくとも作業を続けることができます。

于 2012-06-08T11:49:07.627 に答える