spring - Maven과 pom.xml

김민욱·2022년 1월 6일
0

spring

목록 보기
1/6
post-thumbnail
spring을 처음 시작하는데 많은 난관이 있는 거 같다.
그래서 처음부터 차근차근 정리해보려고한다.

1. Maven의 정의
자바용 프로젝트 관리 도구이다. 미리 작성된 xml 파일을 이용해 라이브러리를 자동으로 다운하거나 빌드해준다.
즉, 자바 소스를 컴파일하고 패키지에 deploy(소프트웨어 전개)까지 자동화 해준다.

2. pom.xml의 정의
pom.xml은 Maven의 정보를 담고있는 파일이다. POM(Project Object Model)을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정하는 부분이다.
다른 프로젝트에도 복붙하면 되기 때문에 범용성과 협업할때 버전통일에 편리하다고 한다!!

3.pom.xml의 위치와 수정
pom.xml은 target안에 위치해있고, 원하는 라이브러리를 https://mvnrepository.com/ 에서 찾아서 다운로드 받을 수 있다. 그리고, dependencies사이에 추가한 후 Maven을 이용해 적용하면 된다!


아 그리고, 필요한 폴더를 생성해줘야한다. resources폴더나, webapp과 그 하위폴더는 모두 자기가 생성!

<?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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>daeik.co.kr</groupId>
    <artifactId>daeik</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>대익건설</name>

    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>5.3.3</org.springframework-version>
        <org.slf4j-version>1.7.29</org.slf4j-version>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
            <scope>provided</scope>
        </dependency>

        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
            <scope>test</scope>
        </dependency>

        <!-- 이메일 : https://mvnrepository.com/artifact/javax.mail/mail -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>

        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>

        <!-- Servlet -->
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- Test -->
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
            <!--Java 설정을 하기 때문에 web.xml이 없어도 오류가 나오지 않게 설정-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

프로젝트의 pom.xml이다.



4. pom.xml태그의 설명과 분석

<project> : Maven의 XML 네임스페이스를 지정
<modelVersion> : Maven의 model Version
<groupId> : 그룹 ID태그 
<artifactId> : 아티팩트ID 태그 
<version> : 버전명 태그
<packaging> 패키징 형식을 지정하는 태그
<name> : 프로젝트의 이름
<url> : Maven의 url
<properties> : 프로젝트 관련 속성
<parent> : pom.xml의 상속에 관련된 태그
<dependencies> : 프로젝트가 의존하는 라이브러리들의 정보

맨 마지막 dependencises 태그 안에 코드를 쓸 일이 많다.

dependency는 프로젝트의 라이브러리를 정의하는 태그이다.
위의 코드로 정리를 해보면

<groupId> : 라이브러리 그룹 아이디
<artifactId> : 라이브러리 아티팩트 아이디
<version> : 라이브러리 버전
<scope> : 라이브러리가 프로젝트 내에서 사용되는 범위
profile
열쪙 열쪙 열쪙

0개의 댓글