6

Maven がリポジトリからアーティファクトを取得するために使用する設定など、HTTP リクエストのデフォルトの Maven 設定には、次のヘッダーが含まれます。

Cache-control: no-cache
Cache-store: no-store
Pragma: no-cache
Expires: 0
Accept-Encoding: gzip

これは文書化された動作のようです。HTTP 用のデフォルトの Maven ワゴン (つまり、「軽量」クライアント) では、これらのヘッダーを無効にできないようです。

Maven がデフォルトでこのように構成されているのはなぜですか? 実際にバージョンを持つアーティファクトの場合、それらは決して変更されるべきではありませんよね?

私は、多くの開発者が共通の HTTP プロキシを共有する環境で作業しています。この動作は、開発者がキャッシュの恩恵を受けないことを意味します。また、dependencyManagementすべての依存関係があり、変更される可能性のある SNAPSHOT やその他のバージョンを使用していないため、キャッシュは安全であるように思われます。

これらのヘッダーを無効にし、プロキシが応答をキャッシュして返すようにするには、settings.xml または pom.xml に何を入力すればよいですか?

4

1 に答える 1

7

これは文書化された動作のようです。HTTP 用のデフォルトの Maven ワゴン (つまり、「軽量」クライアント) では、これらのヘッダーを無効にできないようです。

実際には、利用可能なセッターを使用して軽量 HTTP Wagonクライアントを構成できます(Maven 2.0+):

<servers>
  <server>
    <id>central</id>
    <configuration>
      <useCache>true</useCache>
    </configuration>
  </server>
</servers>

または、追加の HTTP ヘッダーをオーバーライドまたは提供することもできます (Maven 2.1+):

<server>
  <id>central</id>
  <configuration>
    <httpHeaders>
      <property>
        <name>User-Agent</name>
        <value>Internal-Build-System/1.0</value>
      </property>
    </httpHeaders>
  </configuration>
</server>

これは、 Configuring Maven HTTP Connectionsの Brett Porter によって適切にカバーされています。

Maven がデフォルトでこのように構成されているのはなぜですか?

大雑把な推測: 正しく構成されていないプロキシの問題を回避するための安全な既定値です (これが正しいかどうかはわかりません)。

これらのヘッダーを無効にし、プロキシが応答をキャッシュして返すようにするには、settings.xml または pom.xml に何を入力すればよいですか?

上記の設定は、settings.xml(もちろん、id必要に応じて、 centralMaven が使用するデフォルトのリポジトリ用に調整します) に入ります。

うまくいかない場合 (動作するはずです)、別の方法として、 HTTPClient Wagonに切り替えて、HttpClient HTTP Wagonの高度な構成に記載されているように構成することもできます。

参考文献

于 2010-10-30T01:57:15.943 に答える