스프링

 

 

1 . SpringBootServletInitializer 추가

다음과 같은 형식으로 변경

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(Application.class);
	}
}

 

 

 

 

2. build.gradle 변경

id 'war' 추가

plugins {
	id 'org.springframework.boot' version '2.7.0'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
	id 'eclipse'
	id 'war'
}

 

war 플러그인 추가

apply plugin:'war'

 

 

bootWar 추가

bootWar {
	archiveName 'ROOT.war'
	archiveBaseName = "ROOT"
	archiveFileName = "ROOT.war"
	archiveVersion	= "0.0.0"
}

 

 

spring-boot-starter-tomcat 추가

	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

 

 

build.gradle  전체 샘플  예

plugins {
	id 'org.springframework.boot' version '2.7.5'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
	id 'eclipse'
	id 'war'
}

group = 'com.sample'
version = '0.0.1-SNAPSHOT'
apply plugin:'war'
sourceCompatibility = '11'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}


bootWar {
	archiveName 'ROOT.war'
	archiveBaseName = "ROOT"
	archiveFileName = "ROOT.war"
	archiveVersion	= "0.0.0"
}
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'mysql:mysql-connector-java'
	annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	implementation 'javax.servlet:jstl:1.2'	
	implementation 'org.jsoup:jsoup:1.15.1'	
	implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.12.4'
	implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

tasks.named('test') {
	useJUnitPlatform()
}

 


 

 

3.  Gradle Tasks 메뉴 에서 bootWar 를 클릭해서  빌드

 

Navigator 메뉴와 Gradle Tasks 메뉴가 없다면

window -> show view  에서 Navigator 메뉴와 Gradle Tasks 를 연다.

 

Gradle Tasks 메뉴 에서 bootWar 를 클릭

 

Navigator  에서   build -> libs  디렉토리에 빌드된 ROOT.war 파일이 생성 된다.

 

 

 

 

 

 

 

 

 

 

★ 스프링부트 3.2  이상 적용 

 

SpringBootServletInitializer  설정은 동일하며 

build.gradle 에서 다음과 같이 설정한다.

 

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.2'
	id 'io.spring.dependency-management' version '1.1.4'
	id 'war'
}


apply plugin:'war'

bootWar {
	archiveBaseName = "ROOT"
	archiveFileName = "ROOT.war"
	archiveVersion  = "0.0.0"
}
//-plain.war 를 생성 금지
war {
	enabled = false
}

 

 

spring-boot-starter-tomcat 라이브러리 추가

1)메이븐

<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- ... -->
</dependencies>

 

2) 그래들

dependencies {
    // ...
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    // ...
}

 

 

 

전체 소스 샘플

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.2'
	id 'io.spring.dependency-management' version '1.1.4'
	id 'war'
}

group = 'com.shop'
version = '0.0.1-SNAPSHOT'
apply plugin:'war'

bootWar {
	archiveBaseName = "ROOT"
	archiveFileName = "ROOT.war"
	archiveVersion  = "0.0.0"
}
//-plain.war 를 생성 막기
war {
	enabled = false
}


java {
	sourceCompatibility = '17'
}

repositories {
	mavenCentral()
}


dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
	implementation group: 'com.github.gavlyukovskiy', name: 'p6spy-spring-boot-starter', version: '1.9.1'
	implementation group: 'nz.net.ultraq.thymeleaf', name: 'thymeleaf-layout-dialect', version: '3.3.0'
	implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.2.0'

	//jwt version: '0.12.4'  =>
	implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
	runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
	implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'

	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'com.h2database:h2'
	runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
	runtimeOnly 'com.mysql:mysql-connector-j'


	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.springframework.security:spring-security-test'

	// ⭐ Spring boot 3.x이상에서 QueryDsl 패키지를 정의하는 방법
	implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
	annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
	annotationProcessor "jakarta.annotation:jakarta.annotation-api"
	annotationProcessor "jakarta.persistence:jakarta.persistence-api"


	// com.google.guava
	implementation group: 'com.google.guava', name: 'guava', version: '33.0.0-jre'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'


}

//-plain.jar 를 생성 금지
jar {
	enabled = false
}

tasks.named('test') {
	useJUnitPlatform()
}

def querydslSrcDir = 'src/main/generated'
clean {
	delete file(querydslSrcDir)
}
tasks.withType(JavaCompile) {
	options.generatedSourceOutputDirectory = file(querydslSrcDir)
	options.compilerArgs.add("-parameters")
}


 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

세상에서 가장 중요한 것은 어찌하면 내가 진정 나다와질 수 있는가를 아는 일이다. -몽테뉴

댓글 ( 4)

댓글 남기기

작성