Skip to content

Instantly share code, notes, and snippets.

@kazusato
Last active July 28, 2020 19:21
Show Gist options
  • Save kazusato/8eae5613f54f34e00c6ce70c0e0debde to your computer and use it in GitHub Desktop.
Save kazusato/8eae5613f54f34e00c6ce70c0e0debde to your computer and use it in GitHub Desktop.
Spring Bootでライブラリープロジェクトを作る

はじめに

目的

Spring Bootアプリケーションで、複数アプリケーション間で共通に使われるコンポーネントを別のプロジェクトに切り出し、 当該プロジェクトをJARとしてMavenリポジトリー経由で配布可能とする。

前提

  • ビルドはGradle、開発言語はKotlin。プロジェクトはSpring Initializrで作るが、build.gradleはGroovy DSLに差し替え済。
  • ライブラリー用プロジェクト、アプリケーションプロジェクトの2つを作る。
  • 両者ともに、build.gradleにはプライベートMavenリポジトリー(自分でライブラリーを配置・参照できるもの)が登録済である。

ライブラリープロジェクトで実施すべき事項

build.gradle

基本的に通常のSpring BootアプリケーションとしてSpring Initializrなどでプロジェクトを作ればよい。 ライブラリー用プロジェクトでは、以下の通りbootJarを無効化し、通常Spring Bootでは無効化されているjarを有効化する。

そもそもライブラリー用プロジェクトをSpring Bootアプリケーションとして起動することはないし、 後述の通りライブラリープロジェクトではApplicationクラスを作成する必要がないが、bootJarではApplicationクラスがないと エラーとなるため、この対応が必要。

bootJar {
    enabled = false
}

jar {
    enabled = true
}

Applicationクラスを削除

Spring Initializrでプロジェクトを作成すると、Applicationクラス(@SpringBootApplicationが付与されたクラス) が作成されているが、これを削除する。

アプリケーションプロジェクトで実施すべき事項

build.gradle

ライブラリー用プロジェクトをdependenciesに指定する。 なお、ライブラリー用プロジェクトで行ったbootJar無効化、jar有効化は、アプリケーションプロジェクトでは不要。 (むしろ、これを設定したら起動できなくなるので、やってはいけない)

dependencies {
    implementation("dev.kazusato:simple-lib-spring:0.1.0")
    (中略)
}

Applicationクラスへの@ComponentScan付与

デフォルトのSpring BootではApplicationクラスの所属するパッケージ配下しかスキャン対象とならない。 @ComponentScanを付与することで、スキャン対象を変更することができる。 この際、自プロジェクト分(@ComponentScanを付与しない場合のスキャン対象)についても明示的に指定が必要となる。

@ComponentScan("dev.kazusato.simplelibspring", "dev.kazusato.springlibuser")
@SpringBootApplication
class SpringLibUserApplication

アプリケーションのビルド・実行

通常通り、アプリケーションプロジェクトに対して、

$ ./gradlew bootRun

などとすればよい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment