회사에서 레거시 Spring 프로젝트를 SpringBoot로 전환할 일이 생겼는데
기존 Spring 프로젝트가 Maven을 빌드툴으로 사용해서
하는 김에 Gradle로 전환하고자 우선 관련 공부를 해봤다.

아파치 Ant의 대안이다.
프로젝트 진행시 사용하는 수많은 라이브러리들을 관리하는 도구
내가 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는데
필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동으로 다운로드
다중 모듈 빌드를 병렬으로 실행할 수 있다.
디펜던시 설정을 위해 XML 파일(pom.xml)을 활용한다.
POM = project object model
XML
⇒ 이에 대한 대안으로 Gradle 등장

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.12.1</version>
<executions>
<execution>
<configuration>
<configLocation>config/checkstyle/checkstyle.xml</configLocation>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.5.4</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>apply plugin:'java'
apply plugin:'checkstyle'
apply plugin:'findbugs'
apply plugin:'pmd'
version ='1.0'
repositories {
mavenCentral()
}
dependencies {
testCompile group:'junit', name:'junit', version:'4.11'
}
// 프로젝트의 플러그인 의존성 관리를 위한 설정
buildscript {
// 전역변수 블록
// 전역변수는 $전역변수명 으로 사용할 수 있다.
ext {
springBootVersion = '2.3.7.RELEASE'
lombokVersion = '1.18.10'
}
// 각종 의존성(라이브러리)들을 어떤 원격저장소에서 받을 지를 정한다.
// 공개저장소(jcenter)와 maven 저장소를 사용할 수 있다.
// 상호보완되므로 둘다 사용을 권장
// mavenCentral은 전통적인 저장소이나, 사용자 라이브러리를 업로드하는 것이 어려움
// jcenter는 라이브러리 업로드가 간단하다. mavenCentral에도 업로드되도록 자동화.
repositories {
mavenCentral()
jcenter()
}
dependencies {
// SpringBoot는 라이브러리들의 버전까지 관리해주는 기능이 있는데 여기에서는 GradlePlugin 2.1.7.RELEASE를 기준으로 라이브러리들의 버전을 관리하겠다는 것이다.
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
// 프로젝트에 포함될 플러그인 설정
// dependencies에 비해 좀 더 폭넓게 쓰이고 core한 외부패키지라고 생각하면 된다.
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
/*
== plugins {
id 'java'
id 'eclipse'
id 'org.springframework.boot'
id 'io.spring.dependency-management'
}
*/
// group은 생성될 artifact의 그룹명이고
// version은 release 버전을 나타낸다. build를 수행하면 jar파일 뒤에 version이 붙어서 나온다.
// sourcecompatibility는 자바 소스를 컴파일 할 때 사용한 java version이다.
group 'gradle.test.javaapp'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
}
/*
프로젝트에 추가될 의존성(라이브러리) 설정
- compile, api
- 모듈 수정시, 해당 모듈을 의존하고 있는 모듈을 모두 빌드 => 느림
- compile의 경우 지양을 권장
- A(api) <- B <- C로 의존하면 A수정시 B,C모두 빌드
- implementation
- 모듈 수정 시, 해당 모듈을 직접 의존하는 모듈만 빌드 -> 비교적 빠르다.
- A(implementation) <- B <- C 로 의존하는 구조라면, A 수정 시 B 만 빌드
- testImplementation
- 테스트에 사용하는 라이브러리 추가
- annotationProcessor
- 어노테이션 기반 라이브러리를 컴파일러가 인식하도록 함
- ex.) lombok, queryDSL 등
- compileOnly
- compile에만 필요하고, runtime에는 필요없는 라이브러리를 추가
*/
dependencies {
// 그룹:이름:버전
implementation 'org.springframework.boot:spring-boot-starter-web'
// api '...'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compileOnly "org.projectlombok:lombok:$lombokVersion"
// runtimeOnly '...'
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
}
Windows
* [https://gradle.org/releases/](https://gradle.org/releases/) 에서 binary 파일 다운로드
* C:\Gradle 로 이동
* 환경변수 설정에서 Path에 C:\Gradle\gradle-7.4.2\bin 추가 후 저장
MacOS
brew install gradleCopy
gradle init을 명령을 실행



https://sabarada.tistory.com/198
https://yozm.wishket.com/magazine/detail/1700/
https://jung-story.tistory.com/115