[Intellij & Maven] 여러 프로젝트를 하나의 화면에서 보기

식빵·2023년 10월 14일
0

intellij

목록 보기
12/15

Eclipse 를 쓰다가 Intellij 로 갈아탔을 때 가장 어색한 게 여러 프로젝트를 한 창에 열 수
없다는 점입니다. 그래서 각 프로젝트마다 하나의 Intellij 화면을 새롭게 띄웠어야 하죠.
다만 Maven 프로젝트면 이런 불편한 점을 좀 낮출 수 있는 방법이 있습니다.
지금부터 그 방법을 작성해봅니다.

참고: maven 기반의 프로젝트를 기준으로 가능한 방법입니다.
gradle 도 될 거 같지만 해보진 않았습니다.


방법1: 프로젝트 각각 따로 추가하기

이 방법은 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 설정란에
자동으로 관련 정보가 설정되어 있습니다. 덕분에 빠르게 각 프로젝트를 실행시킬 수 있습니다.





방법2: Maven MultiModule Project

이 방법은 위에서 본것과 다르게 하나의 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 태그를 지우면 됩니다.

discoveryservice 디렉토리 > 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>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>

apigateway-service 디렉토리 > 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>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 프로젝트를
열기만 하면 됩니다.

끝입니다!

profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글