Web/Maven 2019. 4. 30. 11:55

 

오늘 다루어볼 포스팅 내용은 Maven Multi Module을 이용한 Spring Boot Project 만들기입니다. 우선 Maven Multi Module 프로젝트란 하나의 부모 Maven Project를 생성하고 그 밑으로 자식 Maven Module들을 가지는 구조입니다. 부모의 pom.xml에 공통적인 의존 라이브러리를 넣어주면 다른 자식 Maven Module에서는 그대로 사용이 가능합니다. 또한 JPA관련된 모든 소스코드를 common이라는 Maven Module로 만들어서 다른 Maven Module에서 사용하여 공통적인 중복코드를 줄일 수도 있습니다. 바로 예제로 들어가겠습니다.

 

Maven Multi Project

 

모든 예제는 Eclipse + Mac OS 기반으로 작성되었습니다.

 

 

 

오늘 구성해볼 프로젝트 구조입니다. 나중에 OAuth2.0 포스팅에서 다루어 봤던 예제를 다시 정리하여 올릴 소스를 정리할겸 구조를 잡아보려고합니다. 간단히 프로젝트 구조에 대해 설명하자면 oauth2라는 Maven Project를 생성할 겁니다. 이것이 바로 부모 Maven Project가 됩니다. 그리고 그 하위 자식 Maven Moduleauthorizationserver,resourceserver,client 세개의 모듈을 만들겁니다. 그리고 마지막으로 공통적으로 사용할 JPA관련 프로젝트를 common이라는 공통 Maven Module로 만들어 모든 자식 모듈에서 import하여 사용하도록 할 것입니다. common이라는 공통 JPA 프로젝트를 만드는 이유는 만약 3개의 자식 Maven Module들이 같은 DB를 공유하고 있다면 중복되는 코드를 대폭 줄일 수 있습니다. 바로 예제로 들어가겠습니다.

 

첫번째로 Package Explorer에서 오른쪽 클릭하여 New를 선택합니다. 그리고 Maven Project를 클릭합니다.

 

 

Create a simple project를 클릭하고 Next 버튼을 누릅니다.

 

 

 

Group IdArtifact Id를 입력해주고 Packagingpom으로 바꾸어준후 Finish를 클릭합니다. 잘 생성이 되었다면 oauth2프로젝트가 생성이 되고 그 밑으로는 src 폴더와 pom.xml이 생성되어 있을 겁니다. src폴더는 삭제해줍니다.

 

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?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 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.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.spring.security</groupId>
    <artifactId>oauth2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>authorizationserver</module>
        <module>resourceserver</module>
        <module>client</module>
    <module>common</module>
  </modules>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <repositories>
        <!-- 오라클 저장소 -->
        <repository>
            <id>codelds</id>
            <url>https://code.lds.org/nexus/content/groups/main-repo</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
          <groupId>org.webjars</groupId>
          <artifactId>bootstrap</artifactId>
          <version>3.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ucp</artifactId>
            <version>11.2.0.3</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-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>
cs

 

oauth2 프로젝트에 위의 pom.xml 코드를 삽입해줍니다. 그러면 이후에 생성되는 Maven Module들은 위의 라이브러리 설정들을 상속받게 됩니다.oauth2라는 부모 프로젝트를 오른쪽 클릭하여 New를 클릭하고 Maven Module을 클릭해줍니다.

 

 

 

 

Next 를 클릭합니다.

 

 

 

생성할 Module 이름을 작성한 후에 Next를 누릅니다.

 

 

 

현재 select 되어있는 Artifact Id를 누른 후에 Next 버튼을 누릅니다.

 

 

적당한 Group Id를 정해줄 수 있지만 저는 부모 Maven Project 꺼를 default로 사용하였습니다.

 

 

나머지 모든 Module도 동일하게 생성해줍니다. 아마 위와 같은 구조로 생성이 되어있을 겁니다. 하지만 우리가 생각하는 Spring Boot 프로젝트와는 거의 유사하지만 없는 것들이 존재합니다. src/main/resources 입니다. 프로젝트를 오른쪽클릭하여 Project Bulid Path를 누르고 source tab에서 add Folder를 해줍니다. 그리고 main을 클릭하고 새로운 resources 폴더를 생성합니다. 그리고 resourcesbulid 경로를 바꿔줍니다.

 

 

src/main/resources output folderedit해줍니다.

 

 

target/classes를 경로로 잡습니다. 그러면 이제 이 프로젝트는 bulid 이후 해당 경로로 리소스들을 떨궈줄것입니다.

 

 

Excluded**로 설정할겁니다. 그래야 해당 디렉토리로 폴더를 생성하면 패키지처럼 보이지 않을겁니다.

 

 

마지막으로 Spring Boot Main 클래스처럼 @SpringApplication 어노테이션을 달고 main method에 run method를 달아줍니다.

 

여기까지 Maven Multi Module Spring boot Project 만들기였습니다.

'Web > Maven' 카테고리의 다른 글

Apache Maven이란?(아파치 메이븐)  (0) 2019.04.04
메이븐 멀티프로젝트(maven multi module) & SVN  (0) 2018.09.30
posted by 여성게
: