謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

Gradle4 でマルチプロジェクト

教科書はこれ。 第57章 マルチプロジェクトのビルド

まずは Jersey の設定を作って、分離するものを指定する。

Jerseyの設定2(web.xmlとかApplicationクラスとか) - edgegram

サーブレット設定をソースで

web.xml ファイルは昔は役に立ったアーキテクチャだ。
一つの Tomcat で複数のサーブレットをデプロイするにあたって、そのデプロイ設定を行うにはリーズナブルだったろう。

だが、はっきり言おう、今日日1サーバにそう何個もデプロイなんざしねーよと(汗
MVC ができてルーティングができるようになった時から、その役目を失ったと言える。

ということで設定

package net.white_azalea

import org.glassfish.jersey.server.ResourceConfig
import org.glassfish.jersey.server.ServerProperties
import javax.ws.rs.ApplicationPath

@ApplicationPath("/")
class ApplicationSetting : ResourceConfig {

    constructor() {
        packages("net.white_azalea")
        property(ServerProperties.PROVIDER_SCANNING_RECURSIVE, true)
    }
}

そしてこれがあると、設定ファイル( web.xml )いらずなのです。

そしてプロジェクト分離

設定一つで、管理しようと思う。
何って完全分離とか難しすぎた

目的はこんな感じに配置すること。

  • ROOT
    • build.gradle
    • settings.gradle
    • src/main/kotlin/net/white_azalea/ApplicationSetting.kt
      プロジェクト設定を含むソース
    • settings
      サブプロジェクト
      • src/main/kotlin/net/white_azalea/api/Example.kt ソース

まずは ROOT/settings.gradle

include 'settings'

次に、ROOT/build.gradle を編集

apply plugin: 'maven'
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'
apply plugin: 'kotlin'

sourceCompatibility = 1.8
def jerseyVersion = '2.25.1'

buildscript {
  repositories {
    jcenter()
    mavenCentral()
  }

  dependencies {
    classpath 'org.akhikhl.gretty:gretty:+'
    classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.3'
  }
}

def thisGroup = 'net.white-azalea'
def thisVersion = '1.0'

allprojects {
    apply plugin: 'maven'
    apply plugin: 'war'

    group = thisGroup
    version = thisVersion

    repositories {
        jcenter()
        mavenCentral()
        mavenLocal()
    }

    dependencies {
        compile 'javax.ws.rs:javax.ws.rs-api:2.0.1'
        compile "org.glassfish.jersey.containers:jersey-container-servlet:${jerseyVersion}"
        testCompile 'junit:junit:4.+'
    }
}

ext {
    appName = 'example'
    project.version = thisVersion
    project.group = thisGroup
    project.description = 'example gradle application.'
}

dependencies {
    compile project(':settings')
}

ここまで書いたら後は settings ディレクトリを掘ってファイルを配置すればおk