본문 바로가기

Spring Boot/Spring Boot

59 : jar & war 파일로 빌드하기

이전까지 만들었던 SpringbootApi 를 jar파일과 war파일로 빌드를 해볼것이다

 jar/war 파일 빌드 하는법을 순서대로 적어놨다.

 


jar 파일로 빌드하기


1. pom.xml 파일 다음과 같은 위치에<packaging>jar</packaging> 추가

<?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>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>kr.ac.daegu</groupId>
    <artifactId>SpringbootApi</artifactId>
    <version>0.0.1-WAR-SNAPSHOT</version>
    <name>SpringbootApi</name>
    <description>SpringbootApi</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <packaging>jar</packaging>
    <dependencies>

 


2. 우측 maven > Lifecycle > (필드 페이즈) package를 실행하면 > target에 SpringbootApi.jar 파일이 생성 

이 파일을 open in Explorer or Terminel 로 연다.

 

Maven의 Lifecycle

 

package시 오류가 뜰때 해결법
https://s-yeonjuu.tistory.com/26
setting ->Build, Execution, Deployment -> Build Tools -> Maven 
Use Maven wrapper로 되어 있던 Maven home path를 
Bundled (Maven 3)로 변경하고 apply.



3. 관리자 cmd창에서 해당 파일 위치로 들어가서 jar 파일 실행하기
 jar파일 실행 명령어 : java -jar jar파일명.jar.

 

위 사진과 같이 intellij에서 실행하지 않고도 cmd창에서

jar파일로 실행이 성공했다. Postman에서 동작도 잘 되는것을 확인!

 

 

 

 


war 파일로 빌드하기

 

1. pom.xml 파일을 위와 같은 위치에<packaging>war</packaging> 추가

 


2. 그리고 war파일로 빌드를 위해 SpringbootApiApplication 에서 수정이 필요하다

@SpringBootApplication
@MapperScan(basePackages="kr.ac.daegu.springbootapi")
public class SpringbootApiApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApiApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringbootApiApplication.class);
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        Resource[] res =
                new PathMatchingResourcePatternResolver()
                        .getResources("classpath:mappers/*Mapper.xml");
        sessionFactory.setMapperLocations(res);
        return sessionFactory.getObject();
    }
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

여기서 두가지 달라진 점을 볼 수 있다.

  • SpringBootServletInitializer 를 상속받는다
  • @Override configure

 


3. 우측 maven > Lifecycle > (필드 페이즈) package를 실행하면 > target에 SpringbootApi.war 파일이 생성

이 파일을 open in Explorer or Terminel 로 연다.

 

4. 여기서 war파일을 설치해놓은 tomcat/webapps로 복사

    (ROOT파일은 따로 백업 후 폴더에서 치우기) 

위 사진처럼 기존의 ROOT파일을 삭제하지 않고 이름을 바꿔 남겨놨다.

 

 

5. 관리자 cmd창에서 해당 파일 위치로 들어가서 /startup.bat 

   C:\apache-tomcat-8.5.72\bin>startup.bat

 

 

6. war 파일의 이름에 따라 url 주소가 바뀐다. 아래 사진을 참고하자 (localhost:8080/파일이름/)

 

url 주소를 파일이름인 SpringbootApi/ 를 붙여서 실행성공!

Tomcat (.war) 파일로 빌드하는 것이 (.jar) 파일보다 훨씬 복잡했다..