質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Gradle

Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

解決済

Spring Bootのマルチプロジェクトで@ComponentScanにより参照先プロジェクトにある依存クラスを@Autowiredしようとすると 参照元クラスのbeanも生成されなくなる

4321bocya
4321bocya

総合スコア13

Gradle

Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

2回答

1評価

0クリップ

10379閲覧

投稿2019/02/28 15:50

編集2019/03/01 02:51

※初めて質問します。よろしくお願いいたします。

実現したいこと

現在、Spring Bootのマルチプロジェクトを作成しており、参照元のプロジェクトの中で
参照先の別モジュールにある依存クラスを@Autowiredしたいです。

現在、発生している問題(概要)

@ComponentScanにより参照先プロジェクトにある依存クラスを@Autowiredしようとした際に
参照元クラスのbeanも生成されなくなります。
具体的には@RestControllerアノテーションをつけたContorollerです。

前提

フォルダ構成は以下のパッケージエクスプローラーの通りです。
sample-appがcommon-businessを参照しているという関係性です。
イメージ説明

現在、発生している問題(詳細)

sample-app/build.gradleにcommon-businessへの参照設定を追記してマルチプロジェクトとし、
sample-appのmainクラスにて@ComponentScanを付与したところsample-appのBean自体が生成されなくなりました。
具体的には以下のControllerで@ComponentScanをはずすとBeanがうまく生成され、localhost:8080/sample/api/testへのアクセスも成功します。

java

package spring.demo.controller; import spring.common.demo.ItemService; @RestController public class ItemController { @Autowired ItemService itemService; @GetMapping("/sample/api/test") public String test() { return "Hello World"; } }

sample-appからcommon-businessを参照するビルドスクリプトが悪いのか、
別モジュールにある依存クラスへの参照設定が悪いのか
それともその他の部分に問題があるのかわかりません。

お手数をおかけしますが、原因部分とその対応策のご教示をお願い致します。

該当のソースコード

sample-appのbuild.gradle及びsetting.gradleは以下の通りです。
/sample-app/build.gradle

gradle

buildscript { ext { springBootVersion = '2.1.3.RELEASE' } } plugins { id 'org.springframework.boot' version '2.1.3.RELEASE' id 'java' } apply plugin: 'io.spring.dependency-management' group = 'spring.demp' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } subprojects { apply plugin: "java" apply plugin: "io.spring.dependency-management" repositories { mavenCentral() } dependencyManagement { imports { mavenBom "org.springframework.boot:spring-boot-dependencies:$springBootVersion" } } } dependencies { compile project(':common-business') implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'org.postgresql:postgresql' testImplementation 'org.springframework.boot:spring-boot-starter-test' }

/sample-app/setting.gradle

gradle

rootProject.name = 'sample-app' include ':common-business' project(':common-business').projectDir = new File('../common-business')

/common-business/build.gradle

gradle

plugins { id 'java' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'org.postgresql:postgresql' testImplementation 'org.springframework.boot:spring-boot-starter-test' // Use JUnit test framework testImplementation 'junit:junit:4.12' }

試したこと

別モジュールにある依存クラスを@Autowiredするために@ComponentScan("common-business")としています。

補足情報(FW/ツールのバージョンなど)

Spring Boot 2.1.3
Gradle 4.10.2

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Gradle

Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。