토이 프로젝트는 VSCode를 사용해서 진행해 보고 싶었다. 인텔리 J를 돈 주고 사용하고 싶진 않았고, (회사에서 사주면 쓰겠지만) 이클립스는 느리다. 그동안 근 10년 가까이 이클립스를 사용해오면서 크게 불만은 없었는데 (중간 2년은 인텔리 J 써봄) IDE에 관심이 없다가 최근 VSCode의 칭찬을 많이 듣게 되면서 관심을 가지게 되었고, 토이 프로젝트에서 써보기로 했다.

먼저 Spring boot Multi Module 환경을 Maven으로 구성해보고 기록을 하지 않으면 다음번엔 높은 확률로 까먹을게 뻔하니 이제 정리하고 기록을 하겠다.

사전 개발환경 Java, Maven, vscode, vscode의 플러그인(Java Extension Pack, Spring Boot Extension Pack)등이 설치되어야 한다.

Spring Initializr 프로젝트 생성

Spring boot 프로젝트 생성하기 전에 Parent 폴더를 생성한다. tp-kyoung 부모 프로젝트로 사용할 tp-kyoung 폴더 안에 Spring boot Project를 두 개 생성한다.

단축키 ctrl + shift + p 또는 F1 으로 Command Palette 창을 열고 Spring Initializr를 입력 하면 Spring Initializr: Create Maven Project... 자동완성 기능으로 나오는 메이븐 프로젝트 생성을 선택해서 tp-api, tp-core 두개의 module 프로젝트를 생성하고 tp-kyoung 부모 폴더에 pom.xml 생성한다

pom.xml까지 생성한 모습

pom.xml 설정

tp-apitp-core프로젝트의 pom.xml내용을 Parent pom.xml파일에 통째로 복사한 다음 아래 첫번째 탭 내용과 같이 수정한다.

tp-api, tp-core프로젝트의 pom.xml 파일들도 아래 두번째 탭 내용과 같이 수정한다.

pom.xml
  • xml
  • xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!-- parent pom.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<groupId>io.kyoung.toy</groupId>
<!-- artifactId 수정 -->
<artifactId>tp-kyoung</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- name 수정 -->
<name>tp-kyoung</name>
<description>Demo project for Spring Boot</description>
<!-- packaging 추가 -->
<packaging>pom</packaging>

<properties>
<java.version>14</java.version>
</properties>

<!-- modules 추가 -->
<modules>
<module>tp-core</module>
<module>tp-api</module>
</modules>

</project>

중간 확인을 위해 Maven clean install 실행.

tp-core 프로젝트 설정

tp-core 프로젝트에서 TpCoreApplication.java TpCoreApplicationTests.java 파일 삭제. (core 프로젝트에서는 Run 기능을 사용하지 않기 때문) tp-core pom.xml 파일에서 아래 부분 삭제.

1
2
3
4
5
6
7
8
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

테스트할 간단한 클래스 작성

1
2
3
4
5
6
7
package  io.kyoung.toy.tpcore;

public class CoreModuleTest {
public static void coreModuleTest() {
System.out.println("Hello tp-core!");
}
}

Parent 프로젝트 pom.xml에 tp-core 디펜던시 추가

1
2
3
4
5
6
7
8
9
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.kyoung.toy</groupId>
<artifactId>tp-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

tp-api 프로젝트 pom.xml에 tp-core 디펜던시 추가

1
2
3
4
<dependency>
<groupId>io.kyoung.toy</groupId>
<artifactId>tp-core</artifactId>
</dependency>

tp-api 프로젝트에서 tp-core 클래스 사용

Imgur

위 스크린샷을 보면 tp-api 프로젝트 main 메소드에서 tp-core 클래스를 사용하는 것을 확인할 수 있다.