Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Mavenでのライブラリ管理とAzureArtifact

More than 1 year has passed since last update.

お題

大林雄一郎です。
普段、世田谷区の方に常駐しているので知らない方も多いかと思いますw

今回はArtifact(Maven)の管理って何?ってところからAzureArtifactを利用してみたい
というおはなしです。

半年くらい前の話

プロジェクトのライブラリ管理をMavenでやってまして、
それの運用の為にNEXUSサーバとやらを構築させられる。

それ専用のVM立てて接続可能な状態にしてインストールして権限設定いじって・・・
などなどやることが多すぎて初見さんがやると無駄に時間が掛かかる。

先月の話

しばやん先生の記事を見るつける
ttps://blog.shibayan.jp/entry/20181126/1543219664

すばらC通り越してすばらD
nugetでやられているので、Mavenでやってみようと思った次第。

ワード

Artifact

jarとかwarとかdllみたいな配布して利用可能なもの(ライブラリ)
どことなく中二心を擽るような単語

Maven

プロジェクトとArtifactの関連付を行い(nugetと同様)
また関連したArtifactをもとにビルド、テスト、デプロイなどプロジェクト管理するもの。

NEXUS

Mavenで管理するArtifactのリポジトリ
一般公開されているライブラリの他に、3rdParty製品(oracleなど)や自作のプロジェクトをアップロードして管理。

AzureArtifact

AzureDevOpsの機能の一つ、NEXUSサーバと同じものが簡単に構築できそう。

プロジェクト、Artifact管理構成

↑で書いた自作のプロジェクトを管理する場合、こんな感じになります。

①プロジェクト最新化させたらそれを共有のMAVENリポジトリ(NEXUSサーバ)にjarをアップロード(↓図でチームAの人)
②各チームの人々はローカルのMAVENリポジトリを最新化すると、チームAの最新が取得可能。
③②で取得するのは、そのチームで必要なjarだけ、
 ⇒自チームで必要なjarを記載したpomファイル(※1)をローカルで管理する。
  必要なものだけをNEXUSサーバからローカルへダウンロード、最新化する。

※1 pom
mavenプロジェクトに必要な情報が書かれたもの。
ローカル(自プロジェクト)で必要なライブラリをここで管理

image.png
ソースコード管理のプロジェクト版て感じですね、1システム作るのに複数プロジェクト、拠点をまたぐ場合にMAVENリポジトリ(NEXUSサーバ)を立てておくと配布が非常に簡単。

しかし、冒頭に書いた通りこのNEXUSサーバの構築がちょいとめんどくさかったので、
AzureArtifactを利用したら構築が簡単なのか試してみました。

AzureArtifact

↑のNEXUSサーバにあたるものがAzureでサービス化されたもの。
位置づけ的にはAzureDevOpsの1機能みたいです。
今回はMavenに限っていますが、nugetなどももちろん使用可能となっています。

さっそくつくってみる

※作業マシンにmavenがインストールされている状態です。※

Devopsポータルからチームプロジェクトを選択してfeedを新規作成
image.png

Mavenを選択して、Generate Maven credentialsを押す。
image.png

Generate Maven credentialsで表示されるのが新規作成するリポジトリのkey
これをローカルのsettings.xmlに張り付ける。
⇒Nexusサーバ運用時はここにサーバの接続情報等が記載されている

settings.xml
<settings>
    <servers>
        <server>
            <id>dev-azure-com-XXXX-aartifact</id>
            <configuration>
                <httpHeaders>
                    <property>
                        <name>Authorization</name>
                        <value>発行された資格情報key
                    </property>
                </httpHeaders>
            </configuration>
        </server>
    </servers>
</settings>

Mavenアーティファクトを公開する

mvn -B archetype:generate -DarchetypeGroupId="org.apache.maven.archetypes" -DgroupId="XXXXX" -DartifactId="YYYYYY"

DgroupId、DartifactIdには作成するプロジェクトが分かればよさそう、
Artifactのリポジトリとプロジェクトを紐づける感じ。

pom.xmlの編集
Mavenアーティファクトを作成するとできるワークスペースに、pom.xmlも作成されているため
プロジェクトの情報も書き加える。
ここに必要なライブラリの情報または子プロジェクトの情報を記載する。

pom.xml
?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>XXXXX</groupId>
    <artifactId>YYYYY</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <description>MMM project.</description>
    <distributionManagement>
        <repository>
            <id>releases</id>
            <url>${repository.url}/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <url>${repository.url}/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
    <repositories>
        <repository>
            <id>snapshots</id>
            <url>${repository.url}/maven-snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <modules>
        <module></module>
        <module></module>
    </modules>
</project>

最後に
mvn deploy、mvn installのコマンドを実行する。
これでAzureArtifactに自プロジェクトのフィードが作成され、pomに書かれているライブラリがインストールされる。
image.png

この状態になれば、eclipsやSTSでビルド通る状態になります。

終わりに

結論だけ言えばAzureArtifactを利用した場合、構築は早くできます。
ただし当たり前ですが、mavenの知識がないといけませんね。
現在稼働しているプログラムが起動できる状態にまでしたかったのですが、また次回にしようかな。
だって今日はクリスマスだもの。

U1second
Blessing Softwareの大林雄一郎です。 新浦安が好きです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away