かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

共有ライブラリを管理するために Sonatype の Nexus Repository Manager OSS を使用する ( その7 )( ksbysample-library-simpleutils ライブラリをアップロードし直した時の挙動と、1.0-SNAPSHOT で呼び出せるのかを確認する )

概要

共有ライブラリを管理するために Sonatype の Nexus Repository Manager OSS を使用する ( その6 )( 登録した ksbysample-library-simpleutils ライブラリを Spring Boot のプロジェクトから利用してみる ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • ksbysample-library-simpleutils ライブラリを変更してアップロードし直した場合に Nexus にどのように登録されるのかを確認します。
    • Spring Boot のサンプルプロジェクトから ksbysample-library-simpleutils ライブラリを呼び出す時に 1.0-SNAPSHOT のバージョン番号で指定して呼び出せる方法があるか確認します。

参照したサイト・書籍

目次

  1. ksbysample-library-simpleutils ライブラリを変更してアップロードし直した場合に Nexus にどのように登録されるのかを確認する
    1. アップロード前の Nexus の登録状況を確認する
    2. StringListUtils クラスに sumStringLength メソッドを追加する
    3. sumStringLength メソッドのテストを作成して動作確認する
    4. ksbysample-library-simpleutils ライブラリを Nexus にアップロードする
    5. アップロード後の Nexus の登録状況を確認する
  2. 何も変更せずにアップロードし直したら Nexus にどのように登録されるのか?
  3. Spring Boot のサンプルプロジェクトから ksbysample-library-simpleutils ライブラリを呼び出す時に 1.0-SNAPSHOT のバージョン番号で指定して呼び出す

手順

ksbysample-library-simpleutils ライブラリを変更してアップロードし直した場合に Nexus にどのように登録されるのかを確認する

アップロード前の Nexus の登録状況を確認する

  1. Nexus の管理画面を見ると、現在は maven-snapshots repository の下に以下の画像の状態で登録されています。

    f:id:ksby:20160720155646p:plain

StringListUtils クラスに sumStringLength メソッドを追加する

  1. ksbysample-webapp-demo を閉じて、ksbysample-library-simpleutils プロジェクトを開きます。

  2. src/main/java/ksbysample/library/simpleutils の下の StringListUtils.javaリンク先の内容 に変更します。

sumStringLength メソッドのテストを作成して動作確認する

  1. src/test/groovy/ksbysample/library/simpleutils の下の StringListUtilsTest.groovy を リンク先の内容 に変更します。

  2. テストを実行します。def "sumStringLength(#stringList) --> #result"() メソッド名の左側の矢印アイコンをクリックしてメニューを表示した後、「Run 'sumStringLength(#s...()'」メニューを選択します。

    f:id:ksby:20160720161703p:plain

  3. テストが実行され、全て成功することが確認できました。

    f:id:ksby:20160720161939p:plain

ksbysample-library-simpleutils ライブラリを Nexus にアップロードする

  1. Gradle projects View の uploadArchives タスクをダブルクリックして登録します。

    f:id:ksby:20160720162412p:plain

アップロード後の Nexus の登録状況を確認する

  1. 再び Nexus の管理画面を見ると、maven-snapshots repository の下に以下の画像の状態で登録されていました。1.0-20160720.072325-2 のバージョンのコンポーネントが増えていました。古いバージョンは自動では消えないようです。

    f:id:ksby:20160720162717p:plain

何も変更せずにアップロードし直したら Nexus にどのように登録されるのか?

単にアップロードし直したらどうなるのか興味が出たので試してみます。

  1. Gradle projects View の uploadArchives タスクをダブルクリックして登録します。

    f:id:ksby:20160720170233p:plain

  2. Nexus の管理画面を見ると、maven-snapshots repository の下に 1.0-20160720.080138-3 のバージョンのコンポーネントが増えていました。単に増えるだけのようです。あとバージョンの末尾の数字が1つずつ上がることに気づきました。

    f:id:ksby:20160720170959p:plain

Spring Boot のサンプルプロジェクトから ksbysample-library-simpleutils ライブラリを呼び出す時に 1.0-SNAPSHOT のバージョン番号で指定して呼び出す

Nexus の管理画面を見た時に ksbysample-library-simpleutils ライブラリのバージョンが 1.0-20160716.025552-1 と表示されたのでてっきりこれで指定するものと思ってしまったのですが、1.0-SNAPSHOT でも指定できるようです。試してみます。

  1. ksbysample-library-simpleutils を閉じて、ksbysample-webapp-demo プロジェクトを開きます。

  2. build.gradle を リンク先の内容 に変更します。

  3. Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして build.gradle を反映します。

  4. 反映後 Project View の External Libraries を展開すると、ksbysample-library-simpleutils ライブラリのバージョンが 1.0-SNAPSHOT になっていることが確認できます。

    f:id:ksby:20160722005838p:plain

    ※実は1日前に試した時は何度やっても 1.0-20160716.025552-1 のまま変わらなかったんですよね。今日になったら jar のファイル名のバージョン番号は 1.0-SNAPSHOT に変わるし、追加した sumStringLength メソッドも呼び出せるようになっているし、不思議です。。。

  5. src/main/java/ksbysample/webapp/demo の下の SampleController.javaリンク先の内容 に変更します。

  6. Gradle projects View から bootRun タスクを実行して Tomcat を起動します。

  7. ブラウザから http://localhost:8080/sample/sum にアクセスすると、"6" の文字列が表示されました。

    f:id:ksby:20160722010803p:plain

  8. Ctrl+F2 を押して Tomcat を停止します。

ソースコード

StringListUtils.java

package ksbysample.library.simpleutils;

import java.util.List;
import java.util.stream.Collectors;

public class StringListUtils {

    static public String convertStringList2LengthCsv(List<String> stringList) {
        String result = null;
        if (stringList != null) {
            result = stringList.stream()
                    .map(s -> s == null ? "0" : Integer.toString(s.length()))
                    .collect(Collectors.joining(","));
        }

        return result;
    }

    static public int sumStringLength(List<String> stringList) {
        int result = 0;
        if (stringList != null) {
            result = stringList.stream()
                    .mapToInt(s -> s == null ? 0 : s.length())
                    .sum();
        }

        return result;
    }

}
  • sumStringLength メソッドを追加します。

StringListUtilsTest.groovy

package ksbysample.library.simpleutils

import spock.lang.Specification
import spock.lang.Unroll

class StringListUtilsTest extends Specification {

    ..........

    @Unroll
    def "sumStringLength(#stringList) --> #result"() {
        expect:
        StringListUtils.sumStringLength(stringList) == result

        where:
        stringList            || result
        null                 || 0
        [null]               || 0
        ["a"]                || 1
        ["テスト"]           || 3
        ["a", "ab", "abc"]  || 6
        ["a", null, "abc"]  || 4

    }

}
  • def "sumStringLength(#stringList) --> #result"() テストメソッドを追加します。

build.gradle

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')

    compile('ksbysample.library:ksbysample-library-simpleutils:1.0-SNAPSHOT')
}
  • dependencies に記述した ksbysample-library-simpleutils ライブラリのバージョンを 1.0-20160716.025552-11.0-SNAPSHOT に変更します。

SampleController.java

package ksbysample.webapp.demo;

import ksbysample.library.simpleutils.StringListUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Arrays;

@Controller
@RequestMapping("/sample")
public class SampleController {

    @RequestMapping
    @ResponseBody
    public String index() {
        return StringListUtils.convertStringList2LengthCsv(Arrays.asList("a", "ab", "abc"));
    }

    @RequestMapping("/sum")
    @ResponseBody
    public String sum() {
        return Integer.toString(StringListUtils.sumStringLength(Arrays.asList("a", "ab", "abc")));
    }

}
  • sum メソッドを追加します。

履歴

2016/07/22
初版発行。