Gradle 2.0으로 업그레이드 된 버젼에 대해서 업데이트 된 글이 있습니다.
기존 gradle을 이용한 개발 환경 설정 업데이트입니다.
변경사항은 다음과 같습니다.
1. jetty plugin의 제거 : 개발환경에서는 jetty / tomcat의 차이가 없을 것 같아, jetty를 없앴습니다.
2. spork를 이용한 테스트 환경 추가. : groovy base인 spork를 이용한 test 환경을 추가하였습니다.
3. tomcat plugin 사용시, tomcatRun 에러 수정 : tomcat plugin 사용시 tomcatRun 을 하면 servlet jar class not found 에러가 나오는 것을 수정했습니다.
4. gradle 1.9 에서 동작하지 않던 버그를 수정했습니다.
5. build.gradle을 4개로 분리했습니다.
1) base.gradle : 기본 설정에 관련된 내용으로 구성됩니다.
2) domain.gradle : domain module에 관련된 내용으로 구성됩니다. (queryDsl QFile generate)
3) web.gradle : war에 관련된 내용으로 구성됩니다. (tomcatRun, tomcatRunWar)
build.gradle
apply plugin: 'base' apply plugin: 'sonar-runner' apply plugin: 'maven' version = '1.0.0' ext { javaVersion = 1.7 springVersion = '4.0.0.RELEASE' } buildscript { repositories { mavenCentral() jcenter() maven { url 'http://repo.springsource.org/plugins-release' } } dependencies { classpath 'org.gradle.api.plugins:gradle-tomcat-plugin:1.0' classpath (group: 'org.gradle.api.plugins', name: 'gradle-cargo-plugin', version: '0.6.1') classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.1' } } allprojects { apply plugin: 'propdeps' apply plugin: 'propdeps-maven' apply plugin: 'propdeps-idea' apply plugin: 'propdeps-eclipse' repositories { mavenLocal() mavenCentral() jcenter() maven { url 'http://download.java.net/maven/2' } maven { url "http://oss.sonatype.org/content/repositories/snapshots/" } maven { url 'https://maven.java.net/content/repositories/releases'} maven { url 'http://repo.springsource.org/plugins-release' } } dependencies { provided 'org.projectlombok:lombok:0.12.0' } } apply from: 'base.gradle' apply from: 'domain.gradle' apply from: 'web.gradle'
base.gradle
subprojects { apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'eclipse-wtp' apply plugin: 'idea' apply plugin: 'jacoco' apply plugin: 'groovy' sonarRunner { sonarProperties { property "sonar.sourceEncoding", "UTF-8" } } jacoco { toolVersion = '0.6.3.201306030806' } test { jacoco { append = false destinationFile = file("target/jacoco.exec") classDumpFile = file("target/classpathdumps") } } if(project.hasProperty('target')) { sourceSets { main.resources.srcDirs = ['src/main/resources', "src/main/resources-${project.target}"] } } else { String hostname = InetAddress.getLocalHost().getHostName(); if(hostname.endsWith('.local')) { //맥의 경우, .local 이 모든 hostname에 추가됩니다. hostname.replace(".local", '') } sourceSets { main.resources.srcDirs = ['src/main/resources', "src/main/resources-" + hostname] } } dependencies { def slf4jVersion = "1.7.2" compile "org.slf4j:jcl-over-slf4j:$slf4jVersion" compile "org.slf4j:jul-to-slf4j:$slf4jVersion" compile "org.slf4j:slf4j-api:$slf4jVersion" compile 'ch.qos.logback:logback-classic:1.0.13' testCompile "junit:junit:4.11" groovy "org.codehaus.groovy:groovy-all:2.1.5" testCompile "org.spockframework:spock-core:1.0-groovy-2.0-SNAPSHOT" testCompile "org.spockframework:spock-spring:1.0-groovy-2.0-SNAPSHOT" } sourceCompatibility = rootProject.ext.javaVersion targetCompatibility = rootProject.ext.javaVersion tasks.withType(Compile) { options.encoding = 'UTF-8' } } sonarRunner { sonarProperties { property "sonar.host.url", "http://192.168.13.209:9000" property "sonar.jdbc.url", "jdbc:mysql://192.168.13.209:3306/sonar" property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver" property "sonar.jdbc.username", "root" property "sonar.jdbc.password", 'qwer12#$' } }
domain.gradle
configure(subprojects.findAll { it.name.endsWith('domain') }) { dependencies { compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.22' compile("com.jolbox:bonecp:0.8.0.RELEASE") { exclude group: 'com.google.guava' } compile group: 'com.google.guava', name: 'guava', version: '15.0' compile group: 'org.springframework', name: 'spring-core', version: "${rootProject.ext.springVersion}" compile group: 'org.springframework', name: 'spring-orm', version: "${rootProject.ext.springVersion}" compile group: 'org.springframework', name: 'spring-tx', version: "${rootProject.ext.springVersion}" compile group: 'org.springframework', name: 'spring-context', version: "${rootProject.ext.springVersion}" compile group: 'org.springframework', name: 'spring-context-support', version: "${rootProject.ext.springVersion}" compile group: 'org.hibernate', name: 'hibernate-core', version: '4.1.10.Final' compile group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.0-api', version: '1.0.1. Final' compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '4.1.10.Final' compile group: 'org.hibernate', name: 'hibernate-validator', version: '4.3.1.Final' compile group: 'org.springframework.data', name: 'spring-data-jpa', version: '1.4.2.RELEASE' def queryDSL = '3.2.4' compile("com.mysema.querydsl:querydsl-core:$queryDSL") compile("com.mysema.querydsl:querydsl-jpa:$queryDSL") compile("com.mysema.querydsl:querydsl-sql:$queryDSL") provided("com.mysema.querydsl:querydsl-apt:$queryDSL") { exclude group: 'com.google.guava' } } sourceSets { generated { java { srcDirs = ['src/main/generated'] } } } task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') { source = sourceSets.main.java classpath = configurations.compile + configurations.provided options.compilerArgs = [ "-proc:only", "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor" ] destinationDir = sourceSets.generated.java.srcDirs.iterator().next() } compileJava { dependsOn generateQueryDSL source generateQueryDSL.destinationDir } compileGeneratedJava { dependsOn generateQueryDSL options.warnings = false classpath += sourceSets.main.runtimeClasspath } clean { delete sourceSets.generated.java.srcDirs } idea { module { sourceDirs += file('src/main/generated') } } }
web.gradle
configure(subprojects.findAll { it.name.endsWith('Web') }) { apply plugin: 'war' apply plugin: 'tomcat' apply plugin: 'cargo' dependencies { String tomcatVersion = '7.0.47' tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}" tomcat "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}" tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") { exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj' } def cargoVersion = '1.3.3' cargo "org.codehaus.cargo:cargo-core-uberjar:$cargoVersion", "org.codehaus.cargo:cargo-ant:$cargoVersion" providedCompile 'javax.servlet:javax.servlet-api:3.1.0' providedCompile 'javax.websocket:javax.websocket-api:1.0' providedCompile 'javax.servlet:jsp-api:2.0' providedCompile "org.apache.tomcat:tomcat-servlet-api:${tomcatVersion}" } tomcatRun { dependsOn war } tomcatRunWar { dependsOn war } cargoRedeployRemote { dependsOn war } cargoDeployRemote { dependsOn war } cargo { containerId = 'tomcat7x' port = 8080 deployable { context = "${project.name}" } remote { hostname = '192.168.13.209' username = 'ykyoon' password = 'qwer12#$' } } }