Java + Angular のアプリケーション資源をnexusで管理している。
nexusの用語や、基本構成についてまとめる。
リポジトリとコンポーネント
NexusとGitでは、リポジトリの概念が異なるためややこしい。
Nexusの1つのリポジトリ(…・①)の中に、Gitでリポジトリと呼ばれるもの(…・②)を複数配置することもある。
このとき、②はNexus上ではリポジトリではなくコンポーネントと呼ばれる。
Nexusにおける各用語
- リポジトリ:Browseのトップレベルに表示されているディレクトリ(トップレベルの入れ物)
- コンポーネント:リポジトリ配下に配置されるプロジェクト(ファイルの集合)
- アセット:ファイル単体
リポジトリのタイプ
主にhosted、group、proxyがある。
- hosted:成果物(ビルド後のアプリケーション資源)の実体を格納する
- proxy:外部から取得するライブラリ等(Gradle、npmやその他パッケージ)を格納する
- group:参照(ショートカットのようなもの)を格納する。hosted、proxyへの参照をここにまとめることで、アプリケーションサーバーはgroupリポジトリのみ参照すれば、hosted、proxyのパッケージを使用できる。
Java(Maven)では、以下の構成となっている。
- maven-release(hosted):ビルドしたアプリケーションを格納する
- maven-snapshots(hosted):
- maven-central(proxy):アプリケーションが使用する外部ライブラリをcacheして格納する
- maven-proxy-shared(proxy):アプリケーションが使用する社内用ライブラリ等をcacheとして格納する
- maven-public(group):maven-release、maven-centralに格納されているパッケージの参照をまとめて格納する
「maven-central」と「maven-proxy-shared」の違い
どちらもproxyだが、外部参照用と、社内用とで異なる。
設定画面からリポジトリ情報を確認すると、Remote repositoryが社内と外部で、参照先が違うことがわかる。
- maven-proxy-shared:社内ネットワーク用(Remote > https://社内サーバー/nexus/repository/maven-pu
- maven-central:外部OSS参照用(Remote > https://repo1.maven.org/maven2/)
これらをまとめている、maven-public(group)の設定を確認する。
Member repositoriesのMember項目に、maven-publicが参照しているリポジトリが設定されている。
参照には優先順位があり、以下のようになっている。
- maven-proxy-shared(社内ネットワーク用proxy)
- maven-release(hosted)
- maven-snapshots(hosted)
- maven-central(外部OSS用proxy)
依存解決順序
- アプリケーションが、maven-public(group)を参照
- maven-public(group)が、maven-proxy-shared(社内ネットワーク用proxy)を参照
操作
リポジトリの削除
コンポーネント単位では、Browseからリポジトリをクリック > 対象のコンポーネントをクリック > Delete folder
リポジトリを丸ごと削除する場合は、設定 > Repositories > 対象のリポジトリをクリック > Delete repository
Appendix
Nexusコンポーネント取得
UIからだと集計機能が無く、Nexusが提供しているAPIをたたくしかない。
『nexusコンポーネントカウントスクリプト』を参照。
Nexusの依存リポジトリキャッシュ機能
依存リポジトリはJavaならGradle(Nexus上ではMavenタイプとして扱われる)、Node系ならnpmによりキャッシュされる。
キャッシュをNexusリポジトリに登録することで、外部へのネットワークアクセスが制限されている場合でも、社内ネットワーク内でNexusがつなげれば、依存リポジトリを使用することができる。
Nexusでは、以下のようなNameでキャッシュリポジトリが作成される。
Javaの場合
- maven-central
- maven-proxy-shared
npmの場合
- npm-proxy
- npm-proxy-shared
ビルドにNexusのキャッシュを参照している場合、ライブラリのアップグレードなどの差分があれば、Nexusは自動的に外部にそのバージョンを取得しに行き、キャッシュを更新する。
一方で、上記のキャッシュリポジトリがそもそもNexus上に存在しなければ、404エラーとなる。
※通常は、Nexusキャッシュが無ければ外部に直接リポジトリを取得しに行く構成にする。
~build.gradle~
buildscript {
repositories {
maven {
url "$nexusPath"
credentials {
username nexususername
password nexusPassword
}
}
mavenCentral() // Nexusに無ければmavenCentral(外部)に取得しに行く
}
}
repositories {
maven {
url "$nexusPath"
credentials {
username nexususername
password nexusPassword
}
mavenCentral()
}
}
では、このキャッシュリポジトリは誰が作っている?
Nexus導入・初期セットアップ時、「Maven Central Proxy」を作ることが推奨されているため、管理者が初期設定時に手動で作成することが多いです。

コメント