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