Thursday, April 30, 2015

Build com Gradle para construir projeto Spring Boot, MVC, JPA e QueryDSL

O Spring Boot foi criado para facilitar o setup e estrutura de projetos Java. Já estamos usando essa tecnologia na YaW a mais de um ano, com resultado bem satisfatório. Ele disponibiliza a infra necessária para criar e executar um projeto Java, stand-alone, em poucos passos. Fornece um web container embutido: Tomcat, Jetty ou Undertown. Integrado a ferramenta de build ele também turbina a configuração e gestão das dependências.

Exemplo de build.gradle:
buildscript {

  ext {
    springBootVersion = "1.3.0.BUILD-SNAPSHOT"
    springLoadedVersion = "1.2.0.RELEASE"
    queryDSLVersion = "3.6.3"
    hsqldbVersion = "2.3.2"
  }

  repositories {
    mavenLocal()
    mavenCentral()
    maven { url "http://repo.spring.io/release" }
    maven { url "http://repo.spring.io/milestone" }
    maven { url "http://repo.spring.io/snapshot" }
    maven { url "https://plugins.gradle.org/m2/" }
  }

  dependencies {
    classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
  }
}

apply plugin: "java"
apply plugin: "spring-boot"

sourceCompatibility = 1.8

repositories {
  mavenCentral()
  maven { url "http://repo.spring.io/snapshot" } 
}

sourceSets {
  generated {
    java {
      srcDirs = ["src/main/generated"]
    }
  }
}

configurations {
  querydslapt
}

dependencies {
  compile "org.springframework.boot:spring-boot-starter-data-jpa"
  compile "org.springframework.boot:spring-boot-starter-web"
  compile "com.mysema.querydsl:querydsl-jpa:${queryDSLVersion}"
  querydslapt "com.mysema.querydsl:querydsl-apt:${queryDSLVersion}"
  runtime "org.hsqldb:hsqldb:${hsqldbVersion}"
}

task generateQueryDSL(type: JavaCompile, group: "build", description: "Gera o codigo das classes do QueryDSL") {
  source = sourceSets.main.java
  classpath = configurations.compile + configurations.querydslapt
  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
  classpath += sourceSets.main.runtimeClasspath
}

clean {
  delete sourceSets.generated.java.srcDirs
}

Por natureza o Gradle segue um sintaxe enxuta para o build. O Spring Boot atua como um wrapper para as dependências de Web e persistência. Precisamos indicar ao Gradle para carregar o driver HSQLDB em memória. O volume maior de configurações é por conta da task (generatedQueryDSL) para geração de código das entidades QueryDSL e das configurações de plugin. Compartilhei no Github esse arquivo build.gradle, junto com o projeto demonstração.

Para fazer o build e executar o projeto use a instrução:
$ gradle bootRun

@edermag

No comments: