제가 다니던 회사는 Maven 기반의 스프링 프레임워크 프로젝트를 운영하고 있었습니다.
스프링 프레임워크는 아시다시피 환경설정을 하는데 복잡하다는 단점이 있습니다. 그래서 환경설정이 용이한 스프링 부트의 도입을 시도하였고 이때 Gradle에 대해 알게되었습니다.
다음은 스프링 부트의 도입과 함께 Gradle 도입을 설득하기 위한 근거에 대한 정리입니다.
다음은 프로젝트에 기본으로 테스트 도구인 JUnit 라이브러리를 의존성 리스트에 추가하고 빌드 도구로 maven을 설정하는 코드입니다.
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.programming.mitra</groupId>
<artifactId>java-build-tools</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</build>
</project>
그리고 다음은 Maven에서 추가한 JUnit에 몇가지 플러그인(Maven CheckStyle, FindBugs 및 PMD)을 추가한 코드입니다.
<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>
위의 코드들을 보면 몇개 추가하지 않은 것 같음에도 불구하고 가독성이 좋지 않음을 느낄 수 있습니다. 그런데 위의 코드들에 대해 Gradle을 사용하면 다음과 같이 간단하게 변경됩니다.
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'
}
Gradle의 경우 어떤 task가 업데이트 되었는지 아닌지를 체크합니다.
이미 업데이트된 테스크에 대해서는 작업이 실행이 되지 않으므로 빌드시간이 단축됩니다.
이는 프로젝트의 크기가 커질수록 Maven에 비해 빌드시간이 많이 단축되는 효과를 가집니다.