티스토리 뷰

Spring과 Maven으로 프로젝트를 하며 Parent와 Child 프로젝트로 구성되어 있는 구조를 한번쯤은 봤을것이다. 이 프로젝트는 어떻게 만드는지 궁금한점이 있었지만 내 일이 아니라 그냥 그 구조에 순응하며 살았는데 막상 내가 만들어야 하는 입장이 되니 고민되는 부분이 많았다. 이 포스팅은 Parent Child 구조로 만드는데 있어서 꼭 정답이 아니라고 먼저 얘기하고 싶고 더 좋은 방법이 분명히 있을것이라고 생각된다. Maven Module을 활용하는 방법도 있을것이고 다른 좋은 방법도 있겠지만 이것은 단지 내가 했던걸 그대로 서술을 했다. 


1. Parent 프로젝트 만들기 

parent project 생성

일단 springboot starter project로 project를 생성하였다. 이름만 정의했을뿐 별다른 옵션을 선택한다거나 하지는 않았고 바로 Next > Finish를 하였다. 

 

spring starter project

생성을 하면 pom.xml에 Unknown Error가 발생할수도 있는데 이럴때는 이 포스팅을 참조하도록 하자. 오류를 다 없앴다면 다음 작업을 진행을 하자. 

 

프로젝트 비우기
프로젝트 비우기

Parent 프로젝트를 구성하기 위해 가지고 있는걸 pom.xml 을 제외하고는 모두 비우기 위한 작업이다. 프로젝트 우클릭하여 Properties로 진입을 하여 Java Build Path로 들어가서 Source와 Libraries에서 모든 항목에 대해 Remove를 해준다. 

 

프로젝트 비우기 최종모습

그럼 위의 그림과 같은 모습이 될것이고 여기서 pom.xml을 제외한 모든것을 또 지워서 아래의 모습이 되도록 만들어준다. 

 

Parent pom.xml 수정

<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 http://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.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>sampleproject-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- packaging pom 추가  -->
    <packaging>pom</packaging>
    <name>sampleproject-parent</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
    </properties>
    
    <!-- module 추가  -->
    <modules>
        <module>sampleproject-child1</module>
        <module>sampleproject-child2</module>
    </modules>
    
    <!-- dependencies 삭제 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    -->

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

마지막으로 Parent 프로젝트의 pom.xml 도 수정을 해줘야 한다. 한번에 빌드를 하기 위해 packing > pom을 추가해주고 추가할 모듈에 대해서 기술을 했다. 그리고 아무런 dependency를 사용하지 않으므로 모두 삭제를 해주면 된다. 


2. Child 프로젝트 만들기

child 프로젝트 만들기

Parent의 pom.xml에서 정의한 module 이름으로 프로젝트를 새로 만든다. 순서는 상관없다. 프로젝트를 추가하고 module을 정의하든 module을 정의하고 프로젝트를 추가하던.. 아무튼 필자는 2개의 Child 프로젝트를 생성할 것이기에 위와 같은 작업을 두번 반복하였다. 

 

Child 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 부분 아래와 같이 수정 -->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>sampleproject-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sampleproject-child1</artifactId>
    <name>sampleproject-child1</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Child의 pom.xml에서는 수정할 부분이 간단하다. parent 부분만 springboot parent가 아닌 내가 만든 parent로 지정해준다

 

폴더구조 변경

그리고 실제 생성한 프로젝트가 있는 폴더로 들어가면 위와 같은 모습으로 존재를 하고 있을것이다. 여기서 child1, 2를 parent에 복사를 해준다. 

 

폴더구조 변경된 모습

parent에 위와 같이 child 프로젝트가 들어가있으면 된다. 

 

child 프로젝트 삭제

그리고 이클립스로 돌아와서 child 프로젝트들을 삭제해준다. parent 아래에 복사해둔것이 또 있기에 이것들은 삭제를 해줘도 된다. 

 

Parent-Child 구조 완성

그런다음 Parent 프로젝트를 새로고침 해보면 원하던 Parent-Child 구조로 완성이 된것을 볼 수 있다. 

 

Child 프로젝트 import

Parent에서 작업을 하지 않으므로 Child를 import 하여 사용한다. 아까는 지웠다가 다시 import해서 쓰는게 이해 안갈수도 있지만 아까는 진정한 child가 아니었고 이제는 진짜 child가 되었다는 뜻이다. 

 

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] sampleproject-parent                                               [pom]
[INFO] sampleproject-child1                                               [jar]
[INFO] sampleproject-child2                                               [jar]

그리고 나서 parent로 빌드도 한번 해보고 

 

parent나 child에서 내용을 조금 변경한 후에 이 둘이 동기화가 잘 되는지 확인해보면 된다. 

 

이상으로 Spring + Maven Project Parent Child 구조로 만드는 작업을 진행해보았다. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
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