Eclipse 를 쓰다가 Intellij 로 갈아탔을 때 가장 어색한 게 여러 프로젝트를 한 창에 열 수
없다는 점입니다. 그래서 각 프로젝트마다 하나의 Intellij 화면을 새롭게 띄웠어야 하죠.
다만 Maven 프로젝트면 이런 불편한 점을 좀 낮출 수 있는 방법이 있습니다.
지금부터 그 방법을 작성해봅니다.
참고: maven 기반의 프로젝트를 기준으로 가능한 방법입니다.
gradle 도 될 거 같지만 해보진 않았습니다.
이 방법은 Maven 프로젝트 하나를 열고, 그 화면에서 각 maven 프로젝트를
수동으로 하나, 하나 추가하는 방식입니다. 이 방법은 가볍게 개인 공부를 하거나,
또는 각 프로젝트 간에 의존관계가 없을 때 사용하면 좋습니다.
1. 지금 갖고 있는 Maven 프로젝트 하나 열어주세요.
저는 평소에 듣던 인강의 Maven 프로젝트를 Intellij 로 열었습니다.
그리고 나서 우측에 있는 Maven
버튼을 클릭합니다.
그러면 우측에 Maven 작업창이 뜹니다.
버튼 아이콘 모양이 다를 수 있습니다!
마우스를 가까이 대면Maven
라고 나오니 잘 찾아보시길 바랍니다.
2. Maven 작업창에서 Add Maven Projects
를 클릭합니다.
3. Select Path
라는 창이 뜨면 또 다른 Maven 프로젝트를 폴더를 선택합니다.
이렇게 계속 선택할 때마다 아래 그림처럼 Maven 작업창에 해당 프로젝트가
정상적으로 추가된 것을 확인할 수 있습니다.
4. 이러고 나서 좌측 Project 창을 띄워보면 마찬가지로 해당 프로젝트가 정상적으로
import 되었음을 알 수 있습니다.
추가적으로 만약 해당 프로젝트가 Spring Boot 프로젝트면 Run/Debug Run 설정란에
자동으로 관련 정보가 설정되어 있습니다. 덕분에 빠르게 각 프로젝트를 실행시킬 수 있습니다.
이 방법은 위에서 본것과 다르게 하나의 Parent Maven Project 를 만들고,
그 밑으로 Child(=Module) 프로젝트를 추가하는 방식입니다.
이 방법은 각 프로젝트가 의존관계가 있을 때 사용하면 좋습니다.
또한 한번에 모든 프로젝트에 maven 명령어를 실행할 수 있다는 장점도 있습니다.
1. parent maven 프로젝트로 사용할 디렉토리를 하나 생성하고,
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>
<!-- 핵심1: 부모 maven 프로젝트의 groupId, artifactId, version 지정 -->
<groupId>com.example</groupId>
<artifactId>microservice-multimodule</artifactId>
<version>0.0.1</version>
<name>microservice-multimodule</name>
<!-- 핵심2: 부모 pom.xml 을 작성할 때는 반드시 packaging = pom 설정! -->
<packaging>pom</packaging>
<!-- 핵심3: 자식 프로젝트 설정 -->
<!-- 참고: 각 module 의 명칭은 해당 프로젝트의 "디렉토리 명"이다! -->
<!-- 종종 각 자식 프로젝트의 "artifactId" 로 오인하는데, 그게 아니다! -->
<!-- 관례적으로 artifactId 와 디렉토리명을 같게 하다보니 이런 오해가 생긴다. -->
<modules>
<module>apigateway-service</module>
<module>discoveryservice</module>
</modules>
<!-- 모든 프로젝트에서 공통으로 사용되는 프로퍼티 설정 -->
<!--
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.test.skip>true</maven.test.skip>
</properties>
-->
<!-- 그외에도 공통으로 사용되는 의존성, build 설정이 필요하다면 추가해준다. -->
<!-- <dependencies></dependencies> -->
<!-- <build></build> -->
</project>
2. 이후에는 위에서 작성한 pom.xml
과 같은 경로에 자식 프로젝트 디렉토리
를 넣습니다.
그리고 각 자식 프로젝트에 있는 pom.xml 을 수정합니다.
아래처럼 parent
태그를 추가하고, 각 프로젝트에서 작성되어 있던
자신만의 groupId
, version
태그를 지우면 됩니다.
<?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>com.example</groupId>
<artifactId>microservice-multimodule</artifactId>
<version>0.0.1</version>
</parent>
<artifactId>discoveryservice</artifactId>
<name>discoveryservice</name>
<!--<groupId>com.example</groupId>-->
<!--<version>0.0.1</version>-->
<!-- 프로젝트마다 다르게 필요한 설정들은 아래에 추가 -->
<!-- <properties></properties>-->
<!-- <dependencies></dependencies> -->
<!-- <build></build> -->
</project>
<?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>com.example</groupId>
<artifactId>microservice-multimodule</artifactId>
<version>0.0.1</version>
<!--<relativePath>../pom.xml</relativePath>-->
</parent>
<artifactId>apigateway-service</artifactId>
<name>apigateway-service</name>
<!--<groupId>com.example</groupId>-->
<!--<version>0.0.1</version>-->
<!-- 프로젝트마다 다르게 필요한 설정들은 아래에 추가 -->
<!-- <properties></properties>-->
<!-- <dependencies></dependencies> -->
<!-- <build></build> -->
</project>
참고로 parent pom.xml 의 경로를 직접 지정할 수 있는
<relativePath>
라는 태그를 parent 태그 안에 작성할 수 있는데,
기본적으로 설정을 안하면 default 로../pom.xml
경로를 찾게 되고,
그 이후에 maven repository 를 찾아보게 됩니다.이런 설정 덕분에 부모 pom.xml 과 자식 pom.xml 은 서로의 위치를 정확히 알 수가 있는 것이죠.
이렇게 작성하고 나서, 부모 pom.xml 이 있는 디렉토리를 기준으로 intellij 프로젝트를
열기만 하면 됩니다.
끝입니다!