web-dev-qa-db-ja.com

Maven中央リポジトリを無効にする

私の会社のポリシーは、自動的にダウンロードされるアーティファクトに眉をひそめます(承認する必要があります)。そのため、Mavenを使用するには、Mavenの中央リポジトリへのアクセスを無効にする必要があります。

言い換えれば、Mavenにany Centralからのダウンロードを試行させたくないのです。

ローカルリポジトリ(ネットワーク化されているかどうかに関係なく)の構成方法を知っています。私のアイデアは、「祝福された」マシンを使用してローカルリポジトリを更新することです。

PS:プロキシ/ネットワークレベルでリクエストをブロックできましたが、Mavenの設定でそれを行う方法について尋ねています。

[〜#〜] update [〜#〜]私は最終的にそれを行う方法を見つけました。 Mavenのホームでは、confディレクトリにグローバルsettings.xml。ミラーをcentralに設定して、内部サーバーを指すか、単にその定義をオーバーライドすることができます。

51
juancn

同意した。リリースビルドでは、外部リポジトリからの直接ダウンロードを許可しないでください。

あなたの質問に対する具体的な答えは、私の答えの2番目の部分です:-)

リポジトリマネージャーのセットアップ

ローカルのMavenリポジトリマネージャーをセットアップすることをお勧めします。適切なオプションは次のとおりです。

これらはすべて、外部で利用可能なMavenセントラルjarのキャッシングプロキシとして機能できます。

Nexusの職業バージョンにも興味があるかもしれません。外部ライブラリを管理するための Procurementスイート が含まれています。また、Maven設定ファイルを集中管理するためのMavenプラグインも提供します。これは、私の回答の2番目の部分です...

ローカルMaven設定

次のディレクトリにある 設定ファイル を更新します。

$ HOME/.m2/settings.xml

すべての中央リクエストがローカルMavenリポジトリにリダイレクトされるように指定します。

<settings xmlns="http://maven.Apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/SETTINGS/1.0.0
                      http://maven.Apache.org/xsd/settings-1.0.0.xsd">
  ...
  <mirrors>
    <mirror>
      <id>central-proxy</id>
      <name>Local proxy of central repo</name>
      <url>http://<hostname>/central</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>
44
Mark O'Connor

[アーティファクト解決の構成]ページ が役立つことがわかりました。 「ミラーミラー」セットアップについて次のように説明します。

唯一の解決規則として、「ミラー化」を単独で使用しないでください。これを使用して、Artifactoryによって厳密に行われるアーティファクトの解決を強制します。 「ミラー化」プロキシ構成は、定義されたリポジトリに対して機能します。ユーザーによって上書きされない限り、組み込みの中央リポジトリとスナップショットリポジトリに優先しますが、非表示にはなりません。リリースとスナップショットを区別しない粗粒度のプロキシルールを定義し、定義されたリポジトリに依存してこの解決フィルタリングを実行します。

MavenのスーパーPOM は、中央リポジトリを定義します。リリースとスナップショットの中央リポジトリとプラグインリポジトリをオーバーライドする方法は次のとおりです。

<repositories>
    <repository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
                <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>    
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

もちろん、受け入れられた答えが述べているように、交換を設定する必要があります。

44
Behe

すべてのアーティファクトリクエストを処理する全社的なリポジトリの場合、単一のリポジトリを設定して$MAVEN_HOME/conf/settings.xml

<mirror>
  <id>internal-repository</id>
  <name>Maven Repository Manager running on repo.mycompany.com</name>
  <url>http://repo.mycompany.com/proxy</url>
  <mirrorOf>*</mirrorOf>
</mirror>

ソース

5
SnakE

最も簡単な方法は、オフラインモードで実行するようにmavenに指示する-oパラメーターを使用することです。もちろん、ローカルリポジトリに必要なものがすべて揃っていることを確認する必要がありますが、これにより、少なくとも未承認のリポジトリに自動的に接続することによるセキュリティ上の懸念はすべて解決されます。

4
Rory Alsop

誰かがあなたのオープンソースガバナンスポリシーを積極的に実施しようとしているように聞こえます。よかったね。

Mavenに必要なコンポーネントをホストするために内部リポジトリマネージャーを使用することに関する他のコメントに同意します。

Roryが述べているように、Maven Central(Central Repository)または他のパブリックオープンソースリポジトリへのアクセスを停止する前に、そのリポジトリに必要なものがすべて揃っていることを確認する必要があります。

マークは、Nexusの調達機能について良い点を指摘しています。その内部レポジトリマネージャーがすべての「承認済み」コンポーネントでセットアップされると、 Nexus Repository Health Check機能 (無料)をオンにすることもできます。リポジトリ内のコンポーネントのセキュリティ脆弱性など。

完全な開示、私はSonatypeで働いています。

3
Derek E. Weeks

過去に、最も堅牢なソリューションは、組み込みリポジトリを手動でオーバーライドすることであることがわかりました。このアプローチは、親POM、settings.xml、ミラー、またはプロファイルを変更するよりも優れていることがわかりました。すべての内部プロジェクトでは、以下の設定をPOMに入れます。

<repositories>
    <repository>
        <id>central</id>
        <url>http://internalrepo</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>snapshots</id>
        <url>http://internalrepo</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://internalrepo</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
    <pluginRepository>
        <id>snapshots</id>
        <url>http://internalrepo</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </pluginRepository>
</pluginRepositories>
2
Jose Martinez

私は同じ問題を抱えていましたが、別の原因がありました。解決策は、Avira Browser Protection(ドイツ語のBrowser-Schutzで)を無効にすることでした。 m2eはnexusからメタデータを転送できませんが、mavenコマンドラインは転送できます から想起しました。

0
iuzuz