[Spring]Gradle의 소개와 spring에서의 gradle 설정
Gradle 소개
Gradle은 Groovy를 이용한 빌드 자동화 시스템이다. Groovy와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다. Java, C/C++, Python 등과 같은 여러 가지 언어를 지원한다.
Ant vs Maven vs Gradle
Java 빌드 자동화 툴에는 크게 3가지 Ant, Maven, Gradle이 사용되어 왔고, 지금도 사용되고 있다.
Ant(Another Neat Tool)
Ant는 Java application의 빌드 과정을 자동화하기 위해 사용되는 Java 라이브러리
'Make'와 유사하고, 특별한 지식없이 쉽게 사용 가능
XML 파일로 작성
코딩 컨벤션이나 프로젝트 구조를 강요받지 않기 때문에 유연함이 주요 장점
build.xml
<project> <target name="clean"> <delete dir="classes" /> </target> <target name="compile" depends="clean"> <mkdir dir="classes" /> <javac srcdir="src" destdir="classes" /> </target> <target name="jar" depends="compile"> <mkdir dir="jar" /> <jar destfile="jar/HelloWorld.jar" basedir="classes"> <manifest> <attribute name="Main-Class" value="antExample.HelloWorld" /> </manifest> </jar> </target> <target name="run" depends="jar"> <java jar="jar/HelloWorld.jar" fork="true" /> </target> </project>
위 build.xml 예제에서는 classes 디렉터리를 지우고, 컴파일을 거치면서 디렉터리를 생성하고 그 안에 src를 넣는 부분이다. 최종적으로 jar 파일을 만들고 실행하게 된다.
Maven
- Ant와 마찬지로 XML로 작성 (훨씬 더 다루기 쉽게)
- 지켜야 하는 규칙과 정의된 명령어 존재
- 그렇기 때문에 Ant보다는 유연성 부족
- pom.xml이라는 설정 파일에 작성
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>baeldung</groupId> <artifactId>mavenExample</artifactId> <version>0.0.1-SNAPSHOT</version> <description>Maven example</description> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>Gradle
- XML을 사용하지 않고, Groovy에 기반한 DSL 사용 (DSL이란 특정 도메인에 특화된 언어)
- Ant와 Maven의 장점을 접목 (Ant의 유연함과 Maven의 강력한 의존 라이브러리 관리 기능)
- 최소한의 기능만 제공 → plugin을 추가함으로써 사용자 커스터마이징 가능
- 빌드와 테스트 실행 결과 Maven에 비해 빠르다.(Gradle이 캐시를 사용하기 때문에 테스트 반복 시 차이가 더 커진다.)
- 스크립트 길이와 가독성 면에서 Maven에 비해 앞선다.
- 의존성이 늘어날수록 성능과 스크립트 품질의 차이가 심해진다.
apply plugin: 'java' repositories { mavenCentral() } jar { baseName = 'gradleExample' version = '0.0.1-SNAPSHOT' } dependencies { compile 'junit:junit:4.12' }
Gradle
build.gradle example
plugins { id 'java' } group 'com.chanyoung' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' }위 파일은 Intellij에서 gradle java 프로젝트를 만들고, Add Framework Support를 이용하여 SpringMVC를 추가했기 때문에 기본 구성만 되어 있다.
apply plugin: 'java' apply plugin: 'eclipse-wtp' apply plugin: 'war' compileJava.options.encoding = 'UTF-8' sourceCompatibility = 1.7 version = '1.0' eclipse { wtp { facet { facet name: 'jst.web', version: '3.0' //Servlet Spec Version 지정 facet name: 'jst.java', version: '1.7' //Java Version 지정, 1.7 ... } } } jar { manifest { attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version } } repositories { mavenCentral() } dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' } test { systemProperties 'property': 'value' } uploadArchives { repositories { flatDir { dirs 'repos' } } }위 파일은 '열혈강의 자바 웹 개발 워크북' 책 p663~664를 참고
'Archive > Spring' 카테고리의 다른 글
| [Spring] Gradle을 위한 Groovy 문법 요약정리 (0) | 2019.04.18 |
|---|---|
| [Spring] IntelliJ에서 Spring + Maven 프로젝트 생성하기 (0) | 2019.04.09 |