Java

SpringBoot + Maven => JAR파일 생성

Daniel0617 2019. 6. 16. 20:43

SpringBoot + Maven => JAR 파일 생성

  • 개발 환경

    - 맥북 : MojaveOS 10.14.1

    - IDE : Intellij

    - SpringBoot : 2.1.2

  • Goal

    - SpringBoot와 Maven으로 JAR 파일 생성

    - 생성된 JAR 파일 외부 서버에 업로드

  • 핵심 사항

    - pom.xml에 build 설정

    - 외부 라이브러리(ex. json, ojdbc 등) maven 에 추가

    - JAR 파일 생성

 

 

1. mvnw 설치 및 ojdbc 라이브러리 추가


외부 라이브러리(ojdbc8.jar)를 dependency에 추가하기 위해 mvnvm 을 설치해야 한다.

아래와 같이 실행한다.

  • brew update : 디렉토리 위치 상관 없음
  • brew install mvnvm : mvnvm을 설치한다.
  • 프로젝트 디렉토리에 들어간다.
  • 'ojdbc8.jar' 라이브러리 파일 위치로 들어간다.
  • 해당 라이브러리를 mvn으로 install한다. 명령어는 아래와 같다.
    mvn install:install-file -Dfile="ojdbc8.jar" -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.1 -Dpackaging=jar

    ⇒ "Build Success"가 확인되면 완료!

    ⇒ 아래 이미지와 같이 결과가 나오면 된다.

 

 

2. pom.xml 작성


  • Code 참고
    <?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.2.RELEASE</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>Test</groupId>
    	<artifactId>Test</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>Test</name>
    	<packaging>jar</packaging>
    	<description>Test</description>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
    		<maven.compiler.source>1.8</maven.compiler.source>
    		<maven.compiler.target>1.8</maven.compiler.target>
    		<start-class>Test.StartApplication</start-class>
    		<webapp.lib>${basedir}/src/lib</webapp.lib>
    	</properties>
    
    	<dependencies>
    	
    		<!--외부 라이브러리 ojdbc8을 dependency에 추가-->
    		<dependency>
    			<groupId>com.oracle</groupId>
    			<artifactId>ojdbc8</artifactId>
    			<version>12.1</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.json</groupId>
    			<artifactId>json</artifactId>
    			<version>20180130</version>
    		</dependency>
    
    		<!--기타 Spring 관련-->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-jdbc</artifactId>
    			<version>2.1.0.RELEASE</version>
    		</dependency>
    
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-assembly-plugin</artifactId>
    				<version>2.2.1</version>
    				<configuration>
    					<!-- jar 파일을 dependencies와 연결해주는 설정 -->
    					<descriptorRefs>
    						<descriptorRef>jar-with-dependencies</descriptorRef>
    					</descriptorRefs>
    				</configuration>
    				<executions>
    					<execution>
    						<phase>package</phase>
    						<goals>
    							<goal>single</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
  • 코드 중요사항

    - <packaging> : jar 설정 필수

    - <properties>

    <start-class>의 경우 SpringBoot에서 첫번째로 실행되는 클래스 지정

    <webapp.lib> 의 경우 외부 라이브러리 경로를 지정하기 위해 작성. 지정된 경로를 통해 <dependency>에 외부 라이브러리 추가(ex. <groupId>com.oracle~)

    - <build> : 각각의 plugin이 현재 어떤 역할을 하는지 정확하게 모름

 

 

3. Maven(package) Build


maven package를 설명하기 전 우선 maven에 라이프 사이클에 대해 알아 볼 것

LifeCycle은 Clean / Default / Site 3가지로 나뉜다. 각각의 역할은 아래 블로그에서 확인 해볼 것

http://wiki.gurubee.net/display/SWDEV/Maven+Lifecycle?

 

  • Maven package로 빌드한다.

    - 에러 발생 시 개별적으로 해결 필요

    - 필자의 경우 SpringBootApplication 인식 X / 외부 라이브러리 빌드 X 에러 발생했으나 위에서 언급한 내용("2. pom.xml 작성 → <start-class>와 <properties>") 그대로 수정해 해결

     

 

4. Build Success 시 JAR 파일 실행


  • 아래 이미지와 같이 지정된 경로의 jar 파일을 실행한다.
  • 실행 명령어는 "java -jar 파일명.jar"

 

5. 배포 방법


  • Build된 '~.jar' 파일과 '~dependencies.jar'파일을 함께 배포한다.

 

주요내용


  • SpringBoot는 tomcat을 내장하고 있어 jar 파일로 배포 할 수 있다.
  • Maven은 프로젝트 빌드(컴파일, 테스트, 패키징), 배포 등에 관한 전반적인 프로젝트 관리 기능을 제공한다.
  • Intellij 로 배포하는 것보다 Maven Package를 활용한 배포가 빌드 시 좀 더 일관성이 있다...

    ⇒ Intellij Build로 JAR 파일을 생성 했을 경우 필자는 똑같은 방식으로 해도 될 때가 있고 안될 때가 있었다.. 따라서 Maven Package로 빌드 하는 게 가장 확실한 방법이다.

  • pom.xml 파일 설정이 중요하다. build 부분과 외부 라이브러리 dependency 추가
  • maven으로 빌드 시 외부 라이브러리를 pom.xml에 추가해줘야 한다.
  • mvn 설치 필수!!!