java 11은 spring 3에서 호환되지 않으므로 spring2.xx버전을 사용할 것
spring2.xxx는 java8부터 사용가능
java 8,11,17version이 LTS(Long-Term-support)버전이므로 자주 보임
? common 모듈에서 만든 클래스가 api모듈에서 찾을수 없다 .
api모듈이 common모듈을 포함하지 못한듯 . gradle설정이 잘못된듯?
뭐 한것도 없는데 몇일뒤에 다시하니까 됐다..
gradle 6버전으로 나와있는것이 많고 gradle 7은 자료가 적다.
gradle 7의 release 노트나 영어로 찾아보자
multimodule 프로젝트 폴더를 만든다.
root는 src가 당장 필요없다, HELP.md 파일을 삭제한다.
multimodul 폴더에 API 모듈,COMMON 모듈을 추가한다.
API모듈은 dependencies로 lombok, Spring web이 추가된다.
API 모듈은 서버를 띄워야하는 목적성을 가지기 때문에 Web이 추가됨
API모듈에서 src/resources의 static, templates폴더, HELP.md 파일을 삭제한다.
COMMON모듈은 dependency로 lombok만 추가한다.
두 모듈을 추가한 후에 루트 프로젝트(multimodule)의
settings.gradle 파일에 api모듈과 common모듈이 추가된 것을 알려야한다.
include 'module-api'
include 'module-common'
추가하고 gradle을 load한 후에 서버에 문제가 없는지 실행해본다.
계속 중간에 실행해줘야 나중에가서 에러가 발견되면 찾기 어려우므로 그런 문제를 예방할 수 있다.
root-project에서 settings.gradle에 include로 선언한 값과 동일해야함
module-api의 build.gradle에서 api는 common module을 참조하므로
implementation project(':module-common') 을 추가해야함
root-project 안에 있는 module의 settings.gradle의 우선순위가 더 높게 되어
root-project의 settings.gradle 만 작성하면 module-common이 module-api를 찾을 수 없다는 에러가 발생한다.
따라서 root-project 하위 module의 settings.gradle을 삭제한다.
settings.gradle은 root-project에서만 관리한다.
prepareKotlinBuildScriptModel 에러는 build.gradle에
tasks.register("prepareKotlinBuildSciprtModel") {}을 추가해준다.
settings.gradle을 삭제하니까 gradle탭에 module-api가 아닌 multimodule로 나온다.
module-api 모듈에 모듈간 의존성 설정을 했다면 자바 클래스를 의존받을 수 있습니다.
앱을 실행하는 파일의 패키지가 dev.be.moduleapi 패키지라면
앱 실행하는 파일의 @SpringBootApplication이 ComponentScan을 할때 moduleapi 패키지와 하위 패키지의 파일만 스캔하므로 dev.be.modulecommon 패키지에 정의된 빈 클래스 가 하위 패키지에 포함되도록 moduleapi 패키지의 실행 파일을 dev.be로 옮기거나 그대로 둔 상태에서 @SpringBootApplication( scanBasePackages = { "dev.be.modulecommon", "dev.be.moduleapi"} 속성을 사용하여
다른 모듈에 존재하는 빈 클래스를 스캔할 수 있습니다.