
今回は、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 コメント:
コメントを投稿