web-dev-qa-db-ja.com

Mavenプライベートリモートリポジトリのセットアップ

私たちのチームにプライベートリモートリポジトリを設定しようとしています。今、私が試したところ、リポジトリは次のものを提供します-

  • mvn compile」が発行されると、「〜/ .m2」で依存関係が検索されます。そこに見つからない場合は、リモートプライベートリポジトリに移動し、依存関係がまだ存在しない場合は中央リポジトリに移動します。

  • コンパイルの前に、チェックサムとメタデータとともに、すべての依存関係をプライベート(およびリモート)リポジトリに配置する必要があります。

  • アーティファクト(例:spring-mvc)が必要な場合、そのアーティファクト(spring-mvc)のすべての依存関係とともにリモートプライベートリポジトリに配置する必要があります。この場合、リモートのプライベートリポジトリから「spring-mvc」がダウンロードされます。ただし、「spring-mvc」の依存関係は、リモートプライベートリポジトリからダウンロードされません。それらは中央リポジトリからダウンロードされます。

今私がやろうとしているのは-

  • 手作業ですべての依存関係を設定する必要がないように、プライベートリモートリポジトリ「R」を設定します。 「mvn compile」が発行されると、まず最初に;依存関係は「〜/ .m2」で検索され、見つからない場合はプライベートリモートリポジトリ「R」に移動します。 「R」で依存関係が見つかった場合、「〜/ .m2」は「R」から取得します。 「R」で依存関係が見つからない場合、これらの依存関係は中央リポジトリからダウンロードされ、今後の使用のために「R」に依存関係が保持されます。その後、「〜/ .m2」は「R」からそれらを取得します。ここでは、リモートのプライベートリポジトリ「R」に手動で依存関係を置く必要はありません。

  • 「〜/ .m2」は、リモートプライベートリポジトリから「spring-mvc」(私のプロジェクトのpom.xmlで言及されている主な依存関係)のすべての依存関係を取得し、「R」はそれぞれの中央リポジトリから取得します。

上記の2つの目標を達成するために、参照用の方法やチュートリアルを提案できる人はいますか?前もって感謝します。

EDIT:Nathaniel Waisbrot の回答とnexus-2.7.0-06-bundleで試しました。数時間の努力の後、jre-7を使用している間にセットアップすることができます。 jre-6では、nexusを開始できません。ただし、プロジェクトはJDK-6でデプロイされます。現在のjreバージョンを変更したくありません。 jre-6を使用するApache-archivaは問題ありません。しかし、前のセクションのすべての目標を達成できるかどうかはわかりません。前のセクションでこれらの目標を達成できるかどうかを教えてくれるarchivaユーザー/専門家はいますか?

24
Razib

Mavenローカルリポジトリをミラーリングするためのセットアップnexus~/.m2/repository.)があります。この投稿はまだ多くの人が訪れているので、 nexusをリポジトリマネージャとして設定した方法を共有すると、他の人にも役立ちます。この手順は、Ubuntu 12.04で完全に機能します。ここにあります -

1。ダウンロード nexus-2.11.1-01-bundle.tar.gz またはnexus ossの最新バージョン。

2。ホームディレクトリにあるtarファイルを抽出します-

$ tar -xvf nexus-2.11.1-01-bundle.tar.gz

これで、ホームディレクトリにnexus-2.11.1-01sonatype-workの2つのディレクトリが作成されます。

3。これら2つのディレクトリを/usr/local/ディレクトリにコピーします(他の場所にコピーできます)-

$ cp -r nexus-2.11.1-01 /usr/local/
$ cp -r sonatype-work /usr/local/

Nexusに関連する実行可能ファイル/構成ファイルはnexus-2.11.1-01ディレクトリに保存され、pom.xmlに記載されているjarファイルはsonatype-workディレクトリに保存されます。
これらのjarファイルは、~/.m2/repositoryのミラーです。初めてmvn packageコマンドを発行すると、すべてのjarsがここに保存されます。その後、mvn packageを再度発行すると、中央リポジトリからダウンロードするのではなく、すべてのjarがnexusリポジトリからダウンロードされます。

4。/usr/local/ディレクトリに移動-

$ cd /usr/local/  

5。nexus-2.11.1-01へのリンクを作成します-

$ Sudo ln -s nexus-2.7.0-06 nexus

6。nexusを実行するには、ターミナルで次のように入力します-

$ bash nexus/bin/nexus console  

ここで、ネクサスはコンソールに接続されています。コンソールを閉じると、nexusサーバーは終了します。 Ubuntuサーバーマシンでnexusを実行しようとしている場合は、 screen。 を使用できます。

注:上記のコマンドを使用してnexusを実行しようとすると、2つの問題が発生する場合があります。問題が見つからない場合は、次の2つの手順をスキップします(手順-7および8)

7。権限が不十分なため、最初の問題が発生する場合があります。エラーメッセージを読み、必要な手順を実行します。しかし、迅速な解決策としてこれを行うことができます-

$ Sudo chmod -R 777 nexus-2.11.1-01/
$ Sudo chmod -R 777 sonatype-work/

8。Java 7よりも小さいjdkバージョンを使用している場合、次のエラーメッセージが表示される場合があります-

ラッパー| JVM ...ラッパーの起動|アプリケーションのロード中にJVMが終了しました。 jvm 1 |スレッド「メイン」の例外Java.lang.UnsupportedClassVersionError:org/sonatype/nexus/bootstrap/jsw/JswLauncher:サポートされていないmajor.minorバージョン51.0

この場合、jdk7を使用して手順6で説明したコマンドを実行します。ubuntuでは、非常に簡単です。 jdk6とjdk7という2つのjdkがあると仮定します。プロジェクトはjdk6で実行されます。 nexusを実行する場合にのみ、ターミナルからこれを行うことができます(/usr/lib/jvm/jdk1.7.0_45ディレクトリのjdk7を想定)-

$ export Java_HOME=/usr/lib/jvm/jdk1.7.0_45
$ export PATH=$Java_HOME/bin:$PATH  

9。ブラウザにアドレスを入力します-http:// localhost:8081/nexus / 。ステップ1から6(エラーが発生した場合、ステップ1から8)が完全に完了した場合、ログイン画面が正常に表示されることがあります。デフォルトのログインユーザー名は-adminおよびパスワードは-admin123

10。ネクサスを停止します。ターミナルを閉じるか、手順6のターミナルでCtrl + Cを押します。 ~/.m2ディレクトリで、_settings.xmlという名前の空のファイルを作成します。次のコンテンツをこのsettings.xmlファイルにコピーします-

<settings>
    <mirrors>
        <mirror>
        <!--This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://localhost:8081/nexus/content/groups/public</url>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>nexus</id>
            <!--Enable snapshots for the built in central repo to direct -->
            <!--all requests to nexus via the mirror -->
            <repositories>
                <repository>
                <id>central</id>
                <url>http://central</url>
                <releases><enabled>true</enabled></releases>
                <snapshots><enabled>true</enabled></snapshots>
                </repository>
            </repositories>

            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

    <activeProfiles>
    <!--make the profile active all the time -->
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
</settings>

11。そして、プロジェクトのpom.xmlファイルに次の行を追加します-

<distributionManagement>
    <snapshotRepository>
        <id>my-snapshots</id>
        <name>My internal repository</name>
        <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>

    <repository>
        <id>my-releases</id>
        <name>My internal repository</name>
        <url>http://localhost:8081/nexus/content/repositories/releases</url>
    </repository>
</distributionManagement>
43
Razib

Sonatype Nexusは、あなたが望むすべてのことを行い、あなたが求めているものに対してほとんど設定を必要とせず、素敵なインターフェースを持っています。基本設定の詳細は、「 Maven内部リポジトリ、これは本当に難しいですか? 」という質問の下にあります。

基本的に、Nexusをキャッシングリポジトリとして設定できます。Mavenクライアントは内部リポジトリにのみアクセスします。内部リポジトリーが成果物を見つけることができない場合、Central(または定義した他の外部リポジトリー)に移動し、それを取得して、後で保管します。

これは素晴らしいことです。なぜなら、すべての依存関係を自由に取得したいところから、ロックダウンされた環境に移行したい場合、Nexusが簡単にできるからです。 Centralからプルするようにセットアップし、クリーンマシンからビルドを実行し(Nexusに現在のCentralの依存関係をすべて取り込むようにします)、プロキシリポジトリ機能をオフにします(したがって、新しい/変更された依存関係はdevopsによって管理されます)。

8

説明したのは、Archivaを含むほとんどのリポジトリマネージャーのデフォルト設定です。 Mavenから使用するようにセットアップする際に、次のことが役立ちますか?

http://archiva.Apache.org/docs/1.3.6/userguide/using-repository.html

4
Brett Porter