본문 바로가기

Java

[Spring] Maven, pom.xml이 뭐에요?(정의)

반응형

 

 

 

 

spring을 처음 배우기 시작할 때에 pom.xml에 dependency~해서 뭔지도 모르는 코드를 막 적으라한다. 

 왜 적나, 적으면 뭐가 달라지는지  궁금해진다.(물론 저만의 생각일 수도 >,.<)

 

그럼 뭔지 알아보도록 하자 ~~

 

 


1. pom.xml의 정의

 pom.xml은 간단히 말하면 Maven의 빌드 정보를 담고 있는 파일로, POM(Project Object Model)을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정하는 부분이다. 

 이것은 다른 프로젝트에도 복사-붙여넣기하면 되기 때문에 범용성이 좋고, 협업할때에 버전을 통일하기에 편리하다.

 

자, 그럼 Maven은 무엇일까?

 

2. Maven의 정의

 자바 프로젝트를 관리하는 툴로, 미리 작성된 xml 파일을 이용하여 라이브러리를 자동으로 다운로드하거나 프로젝트를 빌드해준다. 즉, 자바 소스를 컴파일하고 패키지해서 deploy까지 자동화 해준다는 것이다.

 

 

3. pom.xml에 담겨 있는 정보

프로젝트명>target>pom.xml 파일을 열자.

파일 위치

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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.tistory</groupId>
	<artifactId>web</artifactId>
	<name>tistory</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>
	<dependencies>
		<!-- 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>
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</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>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>        
	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</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>
        </plugins>
    </build>
</project>

 

 (처음 프로젝트를 만들때에 com.tistory.web으로 생성함)

하나씩 태그를 설명하고 분석해보자.


 

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

 

dependencies 태그 안에 코드를 쓸 일이 많기 때문에 dependency에 관해 더 알아보도록 하자!

 

dependency는 프로젝트의 라이브러리를 정의하는 태그다. 

안에 들어가는 태그는 4가지다. (더 있을 수도....?)

 

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

 

 

다음으로 실제로 데이터베이스와 연결할 때에 추가해야하는 pom.xml의 코드에 대해 알아보자.

아래는 <dependencies>태그 안에 들어갈 내용이다.

		<!-- mysql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.13</version>
		</dependency>
        
		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>

		<!-- mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
		</dependency>

		<!-- spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- spring-test -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
			<scope>test</scope>
		</dependency>

 

 

 

<dependency>의 정보

<dependency>
	<groupId>라이브러리의 그룹아이디</groupId>
    <artifactId>라이브러리의 아티팩트아이디</artifactId>
    <version>라이브러리 버전</version>
    <scope>라이브러리를 사용할 범위</scope>
</dependency>

각 라이브러리의 최신 버전을 확인하는 방법은 mvnrepository.com/ 로 이동해서

 

Maven Repository: Search/Browse/Explore

UberFire JS Last Release on Feb 4, 2021

mvnrepository.com

 

라이브러리의 그룹아이디나 아티팩트아이디를 검색해서 찾으면 된다!

 

 

 

끁!


 

 

모두다 열코 합시다 ~!~!

 

... 취직하고 싶다........... 블로그가 일기장이 되가는것 같다. 이거 쓰는 맛에 사는 것 같다.재밌다.

이거 보는사람 행복가득~

반응형