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") }
댓글 ( 4)
댓글 남기기