読者です 読者をやめる 読者になる 読者になる

かんがるーさんの日記

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

Spring Boot 1.2.x の Web アプリを 1.3.x へバージョンアップする ( その2 )( build.gradle の修正 )

概要

Spring Boot 1.2.x の Web アプリを 1.3.x へバージョンアップする ( その1 )( 概要 ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • build.gradle の修正

参照したサイト・書籍

目次

  1. 1.1.x ブランチ、及び 1.1.x-springboot-1.2-to-1.3 ブランチの作成
  2. Spring Initializr で 1.3.5 のプロジェクトを作成する
  3. build.gradle を修正して build してみる
  4. 次回は。。。

手順

1.1.x ブランチ、及び 1.1.x-springboot-1.2-to-1.3 ブランチの作成

  1. 1.0.x ブランチを master ブランチへマージしていなかったので、master ブランチをチェックアウトした後、1.0.x –> master へマージして push します。

  2. master ブランチから 1.1.x ブランチを作成して push します。

  3. 1.1.x ブランチから 1.1.x-springboot-1.2-to-1.3 を作成します。

Spring Initializr で 1.3.5 のプロジェクトを作成する

Spring Initializr で作成した時の build.gradle のサンプルが見たいので作成してみます。

  1. IntelliJ IDEA のメインメニューから「File」->「Close Project」を選択して「Welcome to IntelliJ IDEA」ダイアログに戻ります。

  2. 「Welcome to IntelliJ IDEA」ダイアログで「Create New Project」をクリックします。

    f:id:ksby:20160511231039p:plain

  3. 「New Project」ダイアログが表示されます。画面左側のリストから「Spring Initializr」を選択した後、「Next」ボタンをクリックします。

    f:id:ksby:20160511231315p:plain

  4. 次の画面が表示されます。「Type」で「Gradle Project」を選択した後、「Next」ボタンをクリックします。

    f:id:ksby:20160511231549p:plain

  5. 次の画面が表示されます。以下の項目をチェックした後、「Next」ボタンをクリックします。

    • JRebel を使用しているので今回「DevTools」はチェックしません。

    f:id:ksby:20160511231907p:plain f:id:ksby:20160511231951p:plain

  6. 次の画面が表示されます。特に何も変更せずに「Finish」ボタンをクリックします。

    f:id:ksby:20160511232334p:plain

  7. 「Import Project from Gradle」ダイアログが表示されます。「Create directories for empty content roots automatically」をチェックして、「Gradle JVM」で「1.8.0_92」を選択した後、「OK」ボタンをクリックします。

    f:id:ksby:20160511232625p:plain

これでプロジェクトが作成されて以下の build.gradle が作成されました。

buildscript {
    ext {
        springBootVersion = '1.3.5.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot' 

jar {
    baseName = 'demo'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}


dependencies {
    compile('org.projectlombok:lombok:1.16.6')
    compile('org.springframework.boot:spring-boot-starter-mail')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('org.springframework.session:spring-session')
    compile('org.springframework.boot:spring-boot-starter-thymeleaf')
    compile('org.springframework.boot:spring-boot-starter-web')
    runtime('org.postgresql:postgresql')
    testCompile('org.springframework.boot:spring-boot-starter-test') 
}


eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
    }
}

dependency-management-plugin がないし、以外とシンプルであまり参考になりませんでした。。。

1点だけ初めて気づいたのですが、dependencies タスクに PostgreSQLJDBC ドライバだけ runtime('org.postgresql:postgresql') と書かれていました。runtime という記述を初めて見たのですが、Gradle の 第8章 依存関係管理の基本 を見ると実行時に必要なライブラリを指定する記述だそうです。これは反映したいと思います。

build.gradle を修正して build してみる

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

  2. Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。特にエラー等は出ずに終了しました。

  3. clean タスク実行 → Rebuild Project 実行 を実行します。

    Error が 0個、Warning が 7個出ました。Warning は以下の2種類でした。

    • Warning:Groovyc: The global transform for class groovy.grape.GrabAnnotationTransformation is defined in both jar:file:/C:/Users/root/.gradle/caches/modules-2/files-2.1/org.codehaus.groovy/groovy-all/2.4.6/478feadca929a946b2f1fb962bb2179264759821/groovy-all-2.4.6.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation and jar:file:/C:/Users/root/.gradle/caches/modules-2/files-2.1/org.codehaus.groovy/groovy/2.4.6/844cb06c553a5e6a736f44aa2b67d25bf6a34fde/groovy-2.4.6.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation - the former definition will be used and the latter ignored.
    • Warning:(8, 14) java: mockitのmockit.NonStrictExpectationsは非推奨になりました

    ライブラリの2重定義と、JMockit で NonStrictExpectations が非推奨になったことによる Warning のようなので次に進みます。

  4. build タスクを実行します。

    テストの結果は 178 tests completed, 39 failed, 8 skipped で、BUILD FAILED が表示されました。さすがに1度ではうまくは行かないですね。。。

    f:id:ksby:20160516003751p:plain

  5. Project View の src/test から Run ‘All Tests’ with Coverage を実行します。こちらもいくつかのテストが失敗しました。

    f:id:ksby:20160516005224p:plain

次回は。。。

Rebuild Project 実行時の Warning の解消 → Run ‘All Tests’ with Coverage のエラーの解消 → build タスクの再実行 ( エラーが出れば解消します ) の順で進める予定です。

ソースコード

build.gradle

buildscript {
    ext {
        springBootVersion = '1.3.5.RELEASE'
    }
    repositories {
        jcenter()
        maven { url "http://repo.spring.io/repo/" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("io.spring.gradle:dependency-management-plugin:0.5.6.RELEASE")
        // for Grgit
        classpath("org.ajoberstar:grgit:1.7.0")
        // Gradle Download Task
        classpath("de.undercouch:gradle-download-task:3.0.0")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'de.undercouch.download'
apply plugin: 'groovy'

sourceCompatibility = 1.8
targetCompatibility = 1.8

compileJava.options.compilerArgs = ['-Xlint:all']
compileTestGroovy.options.compilerArgs = ['-Xlint:all']
compileTestJava.options.compilerArgs = ['-Xlint:all']

// for Doma 2
// JavaクラスとSQLファイルの出力先ディレクトリを同じにする
processResources.destinationDir = compileJava.destinationDir
// コンパイルより前にSQLファイルを出力先ディレクトリにコピーするために依存関係を逆転する
compileJava.dependsOn processResources

jar {
    baseName = 'ksbysample-webapp-lending'
    version = '1.1.0-RELEASE'
}

eclipse {
    classpath {
        containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
        containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
    }
}

idea {
    module {
        inheritOutputDirs = false
        outputDir = file("$buildDir/classes/main/")
    }
}

configurations {
    domaGenRuntime
}

repositories {
    jcenter()
}

dependencyManagement {
    imports {
        mavenBom 'io.spring.platform:platform-bom:2.0.5.RELEASE'
    }
}

dependencies {
    def jdbcDriver = "org.postgresql:postgresql:9.4.1208"

    // dependency-management-plugin によりバージョン番号が自動で設定されるもの
    // Appendix A. Dependency versions ( http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions ) 参照
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity4")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("org.springframework.boot:spring-boot-starter-velocity")
    compile("org.springframework.boot:spring-boot-starter-mail")
    compile("org.springframework.boot:spring-boot-starter-security")
    compile("org.springframework.boot:spring-boot-starter-redis")
    compile("org.springframework.boot:spring-boot-starter-amqp")
    compile("org.springframework.session:spring-session")
    compile("org.codehaus.janino:janino")
    compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
    compile("com.fasterxml.jackson.dataformat:jackson-dataformat-xml")
    testCompile("org.springframework.boot:spring-boot-starter-test")
    testCompile("org.springframework.security:spring-security-test")
    testCompile("org.yaml:snakeyaml")
    testCompile("org.codehaus.groovy:groovy-all")
    testCompile("org.spockframework:spock-core")
    testCompile("org.spockframework:spock-spring")

    // dependency-management-plugin によりバージョン番号が自動で設定されないもの、あるいは最新バージョンを指定したいもの
    runtime("${jdbcDriver}")
    compile("org.seasar.doma:doma:2.8.0")
    compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
    compile("org.apache.commons:commons-lang3:3.4")
    compile("org.projectlombok:lombok:1.16.8")
    compile("com.google.guava:guava:19.0")
    compile("org.simpleframework:simple-xml:2.7.1")
    compile("com.univocity:univocity-parsers:2.1.1")
    compile("org.thymeleaf.extras:thymeleaf-extras-java8time:2.1.0.RELEASE")
    testCompile("org.dbunit:dbunit:2.5.1")
    testCompile("com.icegreen:greenmail:1.5.0")
    testCompile("org.assertj:assertj-core:3.4.1")
    testCompile("com.jayway.jsonpath:json-path:2.2.0")
    testCompile("org.jmockit:jmockit:1.23")

    // for Doma-Gen
    domaGenRuntime("org.seasar.doma:doma-gen:2.8.0")
    domaGenRuntime("${jdbcDriver}")
}
  • Spring Boot のバージョンアップ対応として以下の点を変更します。
    • buildscript タスクの以下の点を変更します。
      • springBootVersion = '1.2.8.RELEASE'springBootVersion = '1.3.5.RELEASE' に変更します。
    • dependencyManagement { imports { mavenBom 'io.spring.platform:platform-bom:2.0.5.RELEASE' } } を追加します。
    • dependencies タスクの以下の点を変更します。
      • compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity3")compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity4") に変更します。
      • 以下の2行を削除します。
        • testCompile("org.springframework.security:spring-security-core:3.2.9.RELEASE")
        • testCompile("org.springframework.security:spring-security-web:3.2.9.RELEASE")
      • testCompile("org.springframework.security:spring-security-test:4.0.2.RELEASE")testCompile("org.springframework.security:spring-security-test") に変更します。
      • compile("org.springframework.session:spring-session:1.0.1.RELEASE")compile("org.springframework.session:spring-session") に変更します。
  • ライブラリを最新バージョンにアップデートするために以下の点を変更します。
    • buildscript タスクの以下の点を変更します。
      • classpath("org.ajoberstar:grgit:1.5.0")classpath("org.ajoberstar:grgit:1.7.0") に変更します。
      • classpath("de.undercouch:gradle-download-task:2.1.0")classpath("de.undercouch:gradle-download-task:3.0.0") に変更します。
    • dependencies タスクの以下の点を変更します。
      • compile("org.seasar.doma:doma:2.7.0")compile("org.seasar.doma:doma:2.8.0") に変更します。
      • compile("com.univocity:univocity-parsers:2.0.0")compile("com.univocity:univocity-parsers:2.1.1") に変更します。
      • testCompile("org.dbunit:dbunit:2.5.1")testCompile("org.dbunit:dbunit:2.5.2") に変更します。
      • testCompile("com.icegreen:greenmail:1.4.1")testCompile("com.icegreen:greenmail:1.5.0") に変更します。
      • testCompile("org.assertj:assertj-core:3.3.0")testCompile("org.assertj:assertj-core:3.3.0") に変更します。
      • testCompile("org.jmockit:jmockit:1.22")testCompile("org.jmockit:jmockit:1.23") に変更します。
      • domaGenRuntime("org.seasar.doma:doma-gen:2.7.0")domaGenRuntime("org.seasar.doma:doma-gen:2.8.0") に変更します。
  • それ以外に以下の点を変更します。
    • jar タスクの以下の点を変更します。
      • version = '1.0.0-RELEASE'version = '1.1.0-RELEASE' に変更します。
    • dependencies タスクの以下の点を変更します。
      • compile("${jdbcDriver}")runtime("${jdbcDriver}") に変更します。

履歴

2016/05/16
初版発行。