2015-01-08

2015-01-08 21:00

今回は、Gradleを利用してSpring-bootのマルチプロジェクトを生成し、
EclipseにImportしてみます。

プロジェクトの構成は以下のようになります。


・Master:Multi Projectを生成・管理するための、Gradleの設定ファイルが配置されます。

・Base:SpringのJavaプロジェクトで、DAO、DTO、各種Utilなどが配置されます。
・Shop Front:一般ユーザーが利用する画面で、Baseをインポートします。
・Shop Manager:管理者が利用する画面で、Baseをインポートします。
・Shop Batch:各種バッチが実行されるプロジェクトです。Baseをインポートします。

インストール環境とバージョンは以下のようになります。

インストール環境とバージョン

名前 バージョン ダウンロード元
Windwos(OS) 7 (64bit)
Java Java SE 1.8.0_20 Oracle
Gradle 2.1 Gradle
IDE SPRING TOOL SUITE 3.6.1(Eclipse) Sts
※上記は私の環境で、バージョンが少し変わっても問題ないと思います。

インストール

・JavaはJDKをダウンロード→インストールした後、環境変数を登録してください。
・Gradleはサイトからダウンロード→圧縮解凍した後、環境変数に登録してください。
・STS(SPRING TOOL SUITE)はサイトからダウンロード→圧縮解凍してください。

問題なくインストールされたかをWindowsのコマンドプロンプトを利用して確認してみましょう。
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\park>java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

C:\Users\park>gradle -version

------------------------------------------------------------
Gradle 2.1
------------------------------------------------------------

Build time:   2014-09-08 10:40:39 UTC
Build number: none
Revision:     e6cf70745ac11fa943e19294d19a2c527a669a53

Groovy:       2.3.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_20 (Oracle Corporation 25.20-b23)
OS:           Windows 7 6.1 amd64


続いて、
プロジェクトのワークスペースとプロジェクトのディレクトリを作成します。
私はShopという名前のプロジェクトをD:\に作成しましたが、
他の経路でも構いません。

C:\Users\park>cd /d d:

D:\>md D:\project\shop\workspace\master
D:\>md D:\project\shop\workspace\base
D:\>md D:\project\shop\workspace\shop_front
D:\>md D:\project\shop\workspace\shop_manager
D:\>md D:\project\shop\workspace\shop_batch

D:\>cd D:\project\shop\workspace\master

D:\project\shop\workspace\master>

Gradleのbuild.gradleファイル設定

masterディレクトリの中にbuild.gradleファイルを配置してください。
build.gradleファイルの中身は以下のようになります。

apply plugin: 'eclipse'
/**
 * eclipse 更新時
 * gradlew.bat clean mkdirs eclipse
 *
 * Build時
 * gradlew.bat clean build
 *
 * リアルサーバ用のBuild時
 * gradlew.bat -Penv=prod clean build
 * 
 * ディレクトリの生成が必要なときには mkdirs タスク
 */
buildscript {
 ext {
  
  //Spring Boot 
  springBootVersion = '1.1.6.RELEASE'
  
  //Spring 
  springVersion = '4.0.7.RELEASE'
  
 }

 repositories {
  mavenCentral()
  maven {
   url 'http://repo.spring.io/libs-release'
   url 'http://repo.spring.io/milestone'
   
  }
 }
 dependencies {
  classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
 }
}

subprojects {
 
 apply plugin: 'java'
 apply plugin: 'eclipse'
 apply plugin: 'idea'

 //Encoding
 def defaultEncoding = 'UTF-8'
 [compileJava, compileTestJava]*.options*.encoding = defaultEncoding
 
 //Java Version
 sourceCompatibility = 1.8
 targetCompatibility = 1.8
 
 //プロジェクトのバージョン
 version = '0.1'
 
 repositories {
  mavenCentral()
 }

 //ソースディレクトリ設定
 sourceSets {
     generated {
         java {
             srcDirs = ['src/main/generated/']
         }
     }
     main {
         resources {
             srcDirs = [ 'src/main/resources' ]
         }
     }
 }
 
 //設定ファイルの切り替え(本番用・テストサーバ用)
 def environment = project.hasProperty( 'env' ) ? env : 'dev'
 
 if( environment.equals( 'prod' ))
 sourceSets.main.resources.srcDirs 'src/main/resources/production'
 else
 sourceSets.main.resources.srcDirs 'src/main/resources/development'
 
 println "Target environment: $environment"

 
  
 dependencies {
  
  
  //Spring boot
  compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
  compile("org.springframework.boot:spring-boot-starter-test:${springBootVersion}")
  

  // Logging with SLF4J & LogBack
  compile("org.slf4j:slf4j-api:1.7.7")
  compile("ch.qos.logback:logback-classic:1.1.2")

  // util
  compile("com.google.guava:guava:18.0")
  compile("com.google.code.gson:gson:2.3")
  

  testCompile 'junit:junit:4.11'
 }
 

 eclipse {
  classpath {
   file {
    whenMerged { classpath ->
     classpath.configure classpath.entries.grep { entry ->
      !(entry instanceof org.gradle.plugins.ide.eclipse.model.Library)
     }
    }
   }
  }

 }
 
 //各種ディレクトリ生成
 task mkdirs << {
  ["src/main/generated", "src/main/java", "src/main/resources", "src/test/java", "src/test/resources"].each {
   def path = "${projectDir}/${it}"
   ant.mkdir(dir: path)
   ant.touch(file: "${path}/.gitkeep")
  }
 }
 
 
}

project(':base') {
 dependencies {
 
 }
 
}

project(':shop_front') {

 configurations {
  spi
 }

 dependencies {
  compile project(':base')
  
  compile("org.springframework.boot:spring-boot-starter-thymeleaf:${springBootVersion}")
 }

 task spiJar(type: Jar) {
  baseName = 'api-spi'
  dependsOn classes
  from sourceSets.main.output
  include('jp/shop/base/**')
 }

 artifacts {
  spi spiJar
 }
}

project(':shop_manager') {

 configurations {
  spi
 }

 dependencies {
  compile project(':base')
  
  compile("org.springframework.boot:spring-boot-starter-thymeleaf:${springBootVersion}")
 }

 task spiJar(type: Jar) {
  baseName = 'api-spi'
  dependsOn classes
  from sourceSets.main.output
  include('jp/shop/base/**')
 }
 
 artifacts {
  spi spiJar
 }
}

project(':shop_batch') {
 apply plugin: 'spring-boot'

 configurations {
  spi
 }

 dependencies {
  compile project(':base')
 }

 task spiJar(type: Jar) {
  baseName = 'api-spi'
  dependsOn classes
  from sourceSets.main.output
  include('jp/shop/base/**')
 }
 
 artifacts {
  spi spiJar
 }
}

task wrapper(type: Wrapper) {
 gradleVersion = '1.12'
}



※Windowsのメモ帳ではUTF-8に保存しても「UTF-8 + BOM」になるため、日本語の文字化けにより実行されない可能性があります。

Gradleのsettings.gradleファイル設定

build.gradleと同様にsettings.gradleファイルを生成します。

includeFlat "base", "shop_front", "shop_manager", "shop_batch"


GradleのWrapper

他の人(プロジェクトのメンバー)がGradleをインストールせずに使えるようにWrapperを追加してみます。

追加する方法はコマンドプロンプトでgradle wrapperコマンドを入力するだけです。
すると自動的にgradlew.batが生成され、gradleをインストールしなくても使えるようになります。

C:\Users\park>cd /d d:

D:\>cd d:\project\shop\workspace\master

D:\project\shop\workspace\master>gradle wrapper
Target environment: dev
Target environment: dev
Target environment: dev
Target environment: dev
:wrapper

BUILD SUCCESSFUL

Total time: 3.701 secs
D:\project\shop\workspace\master>


マルチプロジェクト生成

これで、設定は完了です。
gradlew.batを利用して、マルチプロジェクトを生成してみましょう。

C:\Users\park>cd /d d:

D:\>cd d:\project\shop\workspace\master

D:\project\shop\workspace\master>gradlew.bat clean mkdirs eclipse
Target environment: dev
Target environment: dev
Target environment: dev
Target environment: dev
:base:clean UP-TO-DATE
:shop_batch:clean UP-TO-DATE
:shop_front:clean UP-TO-DATE
:shop_manager:clean UP-TO-DATE
:base:mkdirs
:shop_batch:mkdirs
:shop_front:mkdirs
:shop_manager:mkdirs
:eclipseProject
:eclipse
:base:eclipseClasspath
:base:eclipseJdt
:base:eclipseProject
:base:eclipse
:shop_batch:eclipseClasspath
:shop_batch:eclipseJdt
:shop_batch:eclipseProject
:shop_batch:eclipse
:shop_front:eclipseClasspath
:shop_front:eclipseJdt
:shop_front:eclipseProject
:shop_front:eclipse
:shop_manager:eclipseClasspath
:shop_manager:eclipseJdt
:shop_manager:eclipseProject
:shop_manager:eclipse

BUILD SUCCESSFUL

Total time: 1 mins 17.905 secs
D:\project\shop\workspace\master>

Eclipseにインポート

STSを実行し、
File → Import → Gradle → Gradle Project →  Browse → masterプロジェクト指定(D:\project\shop\workspace\master) → Build Model → 全てのプロジェクトをチェック → Finish


生成されたディレクトリ構造は以下のようになります。



詳細のソースコードはGithubをご参照ください。
https://github.com/kongbab04/gradle-spring-multi-project-skeleton



0 コメント:

コメントを投稿