WindowsにMavenリポジトリのNEXUSサーバを構築する方法

## 1. はじめに
今回はWindowsにMavenリポジトリのNEXUSサーバを構築する方法について説明します。大規模プロジェクトではProxy経由ではなくNEXUSサーバ経由でMavenを利用することをお勧めします。

### 1.1. 検証環境
* Java 1.8.0_131
* nexus-2.14.5-02
* Apache Maven 3.3.9

### 1.2. 作業の流れ

| 項番 | 項目 | 概要 |
|:----:|:-----|:-----|
| 1 |[NEXUSのダウンロードとインストール](#2-nexusのダウンロードとインストール) |公式サイトからZipファイルをダウンロードし、インストール先にZipファイルを展開すれば完了です。 |
| 2 |[NEXUSの起動](#3-nexusの起動) |OSの種類毎に起動スクリプトが用意されているので、対応するものを実行します。 |
| 3 |[NEXUSにログイン](#4-nexusにログイン) |NEXUSの設定はWebコンソールから行うので、まずはNEXUSにログインします。 |
| 4 |[（オプション）Proxyの設定](#5-オプションproxyの設定) |インターネットにアクセスする際にProxyが必要な場合、Proxyを利用するための設定を行います。 |
| 5 |[Centralリポジトリからのインデックスの取得](#6-centralリポジトリからのインデックスの取得) |インストールしたNEXUSにはリポジトリのデータが含まていないため、Maven Centralリポジトリのインデックス情報を取得します。 |
| 6 |[Public Repositoriesの確認](#7-public-repositoriesの確認) |NEXUSが利用者に公開するリポジトリがPublic Repositoriesです。ここにCentralのデータが含まることを確認します。 |
| 7 |[動作確認](#8-動作確認) |NEXUS経由でライブラリが取得できることを確認するため、TERASOLUNA5.xのブランクプロジェクトを作成してみます。 |

## 2. NEXUSのダウンロードとインストール
https://www.sonatype.com/download-oss-sonatype からNEXUSをダウンロードします。
今回は２系のWindows版（`nexus-2.14.5-02-bundle.zip`）をダウンロードし、インストール先となる任意のディレクトリに展開します。

`nexus-2.14.5-02-bundle.zip` には以下の２つがふくまれています。

 * nexus-2.14.5-02　：　NEXUSのプログラム
 * sonatype-work　：　リポジトリのデータを格納するディレクトリ


## 3. NEXUSの起動
`{NEXUSのインストールディレクトリ}/bin/jsw`ディレクトリにOS毎のディレクトリがあります。
起動、停止のスクリプトはこのディレクトリに格納されています。
例えば32bitのWindowsの場合は`windows-x86-32`になります。

| 項番 | スクリプト | 説明 |
|:----:|:----------|:-----|
| 1 | console-nexus.bat |サービスではなく、通常のプロセスとして起動させるスクリプト |
| 2 | install-nexus.bat |サービスとして登録するためのスクリプト |
| 3 | uninstall-nexus.bat |サービスから削除するためのスクリプト |
| 4 | start-nexus.bat |サービスを起動するためのスクリプト |
| 5 | stop-nexus.bat |サービスを停止するためのスクリプト |
| 6 | wrapper.exe |Javaプロセスのラッパー |


```console:NEXUSの起動
C:\tools\nexus-2.14.5-02-bundle\nexus-2.14.5-02\bin\jsw\windows-x86-32>console-nexus.bat
wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | 2017-09-05 15:18:42,373+0900 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.jsw.JswLauncher - Starting with arguments: [./conf/jetty.xml, ./conf/jetty-requestlog.xml]

... 省略 ...
```

**console-nexus.batでプロセスとして起動した場合、Ctrl+Cで停止します。**

## 4. NEXUSにログイン
Webブラウザで http://localhost:8081/nexus にアクセスします。
設定を行うにはAdminユーザでログインする必要があります。
ログインボタンは少し分かり辛いですが、画面右上の「Log In」のリンクをクリックするとログインダイアログが表示されます。

* デフォルトのユーザ情報
 * Username　:　admin
 * Password　:　admin123

## 5. （オプション）Proxyの設定
1. 左メニューの「Administration」「Server」をクリックします。
2. 右のメイン画面に「nexus」タブが表示されます。
3. この画面の真ん中あたりに「Default HTTP Proxy Settings(optional)」の項目があるので、これをチェックします。

Proxyの接続情報（ホスト名、ポート番号等）が編集可能になるので、個人の環境に合わせて設定してください。

| 項番 | 項目 | 値 | 説明 |
|:----:|:----|:---|:-----|
| 1 | Proxy Host |yourproxy.exmaple.com |Proxyサーバのホスト名もしくはIPアドレスを設定 |　
| 2 | Proxy Port |8080 |Proxyサーバのポート番号を設定 |　

Proxyサーバに認証が必要な場合、「Authentication（optional）」をチェックし、認証情報を設定します。

| 項番 | 項目 | 値 | 説明 |
|:----:|:----|:---|:-----|
| 1 |Username　|yourProxyUser |Proxyサーバの認証ユーザのユーザIDを設定 |　
| 2 |Password　|yourProxyPass |Proxyサーバの認証ユーザのパスワードを設定 |　

**設定が完了した後、忘れずに画面下部の「Save」ボタンを押下します。**

## 6. Centralリポジトリからのインデックスの取得
### 6.1. 「Browse Remote」の確認
1. 左メニューの「Repositories」をクリックします。
2. 右のメイン画面に「Repositories」タブが表示れます。
3. リポジトリの一覧が表示されるので「Central」の行を選択します。
4. 画面下部の「Browse Remote」タブをクリックします。
5. 左の「Refresh」ボタンをクリックします。
6. エラーが出ずに、ツリーが展開されればOKです。

### 6.2. 「Download Remote Indexes」を`True`に変更
1. 左メニューの「Repositories」をクリックします。
2. 右のメイン画面に「Repositories」タブが表示れます。
3. リポジトリの一覧が表示されるので「Central」の行を選択します。
4. 画面下部の「Configuration」タブをクリックします。
5. 「Remote Repostitory Access」の「Download Remote Indexes」を `False` から `True` に変更します。

**忘れずに画面下部の「Save」ボタンを押下します。
インデックスを生成するため、しばらく待ちます。**

## 7. Public Repositoriesの確認
MavenでNUEXUSを経由させる場合、利用者がアクセスするリポジトリは「Public Repositorties」になります。「Public Repositorties」に「Central」が含まれていることを確認します。

1. 左メニューの「Repositories」をクリックします。
2. 右のメイン画面に「Repositories」タブが表示れます。
3. リポジトリの一覧が表示されるので「Public Repositories」の行を選択します。
4. 画面下部の「Configuration」タブをクリックします。
5. 「Ordered Group Repositories」に「Central」が含まれていればOKです。

## 8. 動作確認
「[WindowsにMaven(Proxy経由/NEXUS経由)をインストールする方法](http://qiita.com/5zm/items/cc13f09ffb8bd67d6246#44-nexus%E7%B5%8C%E7%94%B1%E3%81%AEsettingxml)」を参考に、MavenでNEXUSを経由させ、問題なくプロジェクトが作成されることを確認します。

## 9. さいごに
今回はWindowsにMavenリポジトリのNEXUSサーバを構築する方法について説明しました。
開発環境によってはインターネットにアクセスするのに制限のあるネットワークもあるかと思います。その場合、NEXUSサーバを利用することで、インターネットにアクセスする端末をNEXUSサーバに限定することが可能です。
構築するのに手間は掛かりますが、NEXUSを経由させることでMavenによるインターネットアクセスの経路をNEXUSに集約するため、統制がしやすく、またキャッシュの効果もあります。
大規模なプロジェクトでは、ぜひNEXUSを利用してみてください。