joobyの開発環境をEclipseで構築する
の関連となりますが、Gradleでビルド出来るようにしたいと思います。
前提条件
- 開発環境はWindows
- WindowsにはJava8がインストール済み
- EclipseがJava8で動作設定済み
- EclipseにGradleが導入済み
Gradleを利用したビルド環境の構築
joobyのプロジェクトディレクトリの作成
こちらを参考に、プロジェクトディレクトリを作成します。(mavenのarchetypeまで実施)
gradleの導入
※環境構築に利用するため(実際にはWindowsのEclipseプラグインでGradleは動作させるため)、PATHの設定等は割愛します。
[vagrant@localhost ~]$ sudo mkdir /opt/gradle
[vagrant@localhost ~]$ sudo wget https://services.gradle.org/distributions/gradle-3.5.1-bin.zip -O /opt/gradle/gradle-3.5.1-bin.zip
--2017-07-18 09:21:40-- https://services.gradle.org/distributions/gradle-3.5.1-bin.zip
Resolving services.gradle.org (services.gradle.org)... 104.16.174.166, 104.16.175.166, 104.16.171.166, ...
Connecting to services.gradle.org (services.gradle.org)|104.16.174.166|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://downloads.gradle.org/distributions/gradle-3.5.1-bin.zip [following]
--2017-07-18 09:21:40-- https://downloads.gradle.org/distributions/gradle-3.5.1-bin.zip
Resolving downloads.gradle.org (downloads.gradle.org)... 104.16.171.166, 104.16.172.166, 104.16.173.166, ...
Connecting to downloads.gradle.org (downloads.gradle.org)|104.16.171.166|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 73302707 (70M) [application/zip]
Saving to: ‘/opt/gradle/gradle-3.5.1-bin.zip’
100%[====================================================================================>] 73,302,707 19.4MB/s in 4.1s
2017-07-18 09:21:44 (17.2 MB/s) - ‘/opt/gradle/gradle-3.5.1-bin.zip’ saved [73302707/73302707]
[vagrant@localhost ~]$ sudo unzip -d /opt/gradle/ /opt/gradle/gradle-3.5.1-bin.zip
Archive: /opt/gradle/gradle-3.5.1-bin.zip
creating: /opt/gradle/gradle-3.5.1/
inflating: /opt/gradle/gradle-3.5.1/LICENSE
~~~
mavenプロジェクトからgradleプロジェクトの作成
[vagrant@localhost ~]$ cd /vagrant/my-app/
[vagrant@localhost my-app]$ /opt/gradle/gradle-3.5.1/bin/gradle init --type pom
Starting a Gradle Daemon (subsequent builds will be faster)
:wrapper
:init
Maven to Gradle conversion is an incubating feature.
BUILD SUCCESSFUL
Total time: 7.44 secs
Eclipseインポート用のプロジェクトに変換(ここまででサーバ側の作業は終了です)
build.gradle に apply plugin: 'eclipse' を追記
[vagrant@localhost my-app]$ cat build.gradle
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'eclipse'
group = 'com.mycompany'
version = '1.0-SNAPSHOT'
description = """my-app"""
sourceCompatibility = 1.8
targetCompatibility = 1.8
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
configurations.all {
}
repositories {
maven { url "http://repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'org.jooby', name: 'jooby-netty', version:'1.1.3'
compile group: 'ch.qos.logback', name: 'logback-classic', version:'1.1.7'
testCompile group: 'junit', name: 'junit', version:'4.12'
testCompile group: 'io.rest-assured', name: 'rest-assured', version:'3.0.1'
変換タスクの実行
[vagrant@localhost my-app]$ /opt/gradle/gradle-3.5.1/bin/gradle eclipse
:eclipseClasspath
:eclipseJdt
:eclipseProject
:eclipse
BUILD SUCCESSFUL
Total time: 1.68 secs
EclipseからGradleプロジェクトのインポート
プロジェクトのルートディレクトリを指定して取込
jooby用の設定を追記
joobyの公式サイトを参考に、必要な設定を追記します。
- buildscriptブロック
- apply plugin: 'jooby'
- joobyRunタスクのmainClassName
※変更後にはGradleタスクをF5リフレッシュします。(リフレッシュしないと、追記した設定が反映されませんでしたので)
ついでに、もう不要となったplugin(maven、eclise)は削除しておきます。
buildscript {
repositories {
mavenCentral()
}
dependencies {
/** joobyRun */
classpath group: 'org.jooby', name: 'jooby-gradle-plugin', version: '1.1.3'
}
}
apply plugin: 'java'
apply plugin: 'jooby'
group = 'com.mycompany'
version = '1.0-SNAPSHOT'
description = """my-app"""
sourceCompatibility = 1.8
targetCompatibility = 1.8
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
configurations.all {
}
repositories {
maven { url "http://repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'org.jooby', name: 'jooby-netty', version:'1.1.3'
compile group: 'ch.qos.logback', name: 'logback-classic', version:'1.1.7'
testCompile group: 'junit', name: 'junit', version:'4.12'
testCompile group: 'io.rest-assured', name: 'rest-assured', version:'3.0.1'
}
joobyRun {
mainClassName = 'com.mycompany.App'
}
joobyRun タスクの実行
[2017-07-18 09:50:08,097]-[HotSwap] INFO com.mycompany.App - [dev@netty]: Server started in 1292ms
GET / [*/*] [*/*] (/anonymous)
listening on:
http://localhost:8080/
動作確認してみた
ブラウザで http://localhost:8080/ にアクセス
Hello World!
正常に動作しているようです。
App.javaを修正してHot Reloadされることを確認
リロードされませんでした。
よく見るとコンソールに下記のような表示がありました。
>>> jooby:run[info|Daemon worker]: Hotswap available on: [C:\work\tmp\pleiades\eclipse]
どうやら、Eclipse本体のインストールパスがベースディレクトリになってしまっているようです。
ソースを調査してみたところ、user.dir というシステム変数で基準ディレクトリを設定できるようでした。
そのため、joobyRunタスクで上記変数を定義しておきます。(gradleのrootプロジェクトのパスが無難かと)
~~~
joobyRun {
mainClassName = 'com.mycompany.App'
System.setProperty("user.dir", rootDir.path)
}
再度jobbyRunタスク再起動後にブラウザで http://localhost:8080/ にアクセス
Hello World!
App.javaを修正してHot Reloadされることを確認
自動でリロードされているようです。
[2017-07-18 12:13:26,477]-[HotswapScanner] INFO com.mycompany.App - Stopped
~~~
[2017-07-18 12:13:27,693]-[HotSwap] INFO com.mycompany.App - [dev@netty]: Server started in 1102ms
GET / [*/*] [*/*] (/anonymous)
listening on:
http://localhost:8080/
ブラウザで http://localhost:8080/ にアクセス
Hello World!
あれ?リロードされたけど、修正結果が反映されていない。
コンパイルされたclassファイル等の配置ディレクトリの変更
下記のように、それぞれで見ているclassファイルが違うためにリロードは検知するが、実際のリロード結果は反映されていないといった
情況になっていたようです。
- Eclipseのデフォルトコンパイル先ディレクトリ:my-app/bin
- Gradleが通常利用するコンパイル先ディレクトリ:build/classes/main
- 今回は関係ないですがmavenの通常利用するディレクトリ:target/classes
一旦手動で、下記のようにEclipseのコンパイル先ディレクトリを個別に指定してみる。
再度jobbyRunタスク再起動後にブラウザで http://localhost:8080/ にアクセス
Hello World!
ソースを修正して再度アクセス
Hello World!!!!!!!!!!!!!!!!!!!
反映されました。
これで、gradleで開発環境を動作させて開発作業を進められそうです。
最後に
手動でEclipseのクラスパス設定を変更してしまっているので、ベストな方法とは思えないのですが初回だけの作業ならまだ許容範囲でしょうか。
(もしかしたらEclipseプラグインでgradleプロジェクト作成時にうまく設定できるかもしれません)