traduccion - Cómo usar gradle Java y Groovy juntos?
gradle vs maven 2018 (3)
Intento utilizar un proyecto de Gradle en IntelliJ 13 pero sigo teniendo problemas como:
- Los archivos Java no pueden ver archivos Groovy
- IntelliJ parece olvidarse de Groovy y me pide que configure un GDK para él
Leí que el plugin groovy permite Groovy y Java en una ruta de origen mixta, pero Java lo quiere. Entonces tengo la siguiente estructura de directorio:
- src / main / groovy
- src / main / java
- src / test / groovy
Tengo una mezcla de clases de Java y Groovy
Aquí está mi build.gradle:
apply plugin: ''java''
apply plugin: ''groovy''
apply plugin: ''eclipse''
apply plugin: ''idea''
apply plugin: ''spring-boot''
apply plugin: ''jacoco''
apply plugin: ''war''
buildscript {
repositories {
maven { url "http://repo.spring.io/libs-snapshot" }
mavenLocal()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.0.0.RC4")
}
}
jar {
baseName = ''my-app''
version = ''0.1.0''
}
repositories {
mavenCentral()
maven { url "http://repo.spring.io/libs-snapshot" }
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-data-jpa:1.0.0.RC4")
compile("org.springframework:spring-orm:4.0.0.RC1")
compile("org.hibernate:hibernate-entitymanager:4.2.1.Final")
compile("com.h2database:h2:1.3.172")
compile("joda-time:joda-time:2.3")
compile("org.thymeleaf:thymeleaf-spring4")
compile("org.codehaus.groovy.modules.http-builder:http-builder:0.7.1")
compile (''org.codehaus.groovy:groovy-all:2.2.1'')
testCompile(''org.spockframework:spock-core:0.7-groovy-2.0'') {
exclude group: ''org.codehaus.groovy'', module: ''groovy-all''
}
testCompile(''org.codehaus.groovy.modules.http-builder:http-builder:0.7+'')
testCompile("junit:junit")
}
jacocoTestReport {
<!-- not sure this is right -->
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
}
task wrapper(type: Wrapper) {
gradleVersion = ''1.11''
}
Y aquí hay un error de compilación que obtengo cuando ejecuto " gradle clean build ":
... src / main / java / com / product / service / FileDownloadService.java: 24: no se puede encontrar el símbolo símbolo: clase FileDownload location: clase com.product.service.FileDownloadService private FileDownload fileDownload;
Si hago todo Java, entonces no obtengo ningún error de compilación o ejecución.
intenta anexar al archivo "build.gradle" las siguientes líneas
sourceSets {
main {
java { srcDirs = [] } // no source dirs for the java compiler
groovy { srcDir "src" } // compile everything in src/ with groovy
}
}
Disculpa me por mi mal inglés. Espero que esto pueda ayudar a tu solución.
Como se mencionó anteriormente, compilar con el plugin groovy también compilará las clases de Java. Solo tenemos que asegurarnos de que la tarea de compilación java no se active tanto en la fuente como en la tarea maravillosa ...
Para esto, y conservar las carpetas de origen (por ejemplo: en eclipse), puede usar el siguiente fragmento refinado en build.gradle :
apply plugin: ''groovy''
//...
sourceSets {
main {
java { srcDirs = [] } // no source dirs for the java compiler
groovy { srcDirs = ["src/main/java", "src/main/groovy"] } // compile everything in src/ with groovy
}
}
Si solo especificas groovy { srcDir "src" }
, tus carpetas main/groovy
y main/java
se identificarán como paquetes en eclipse ...
Mi solución sería tener las clases Java y Groovy ubicadas en src / main / groovy y src / test / groovy (para clases de prueba). Desde el punto de vista del compilador, resultaría algo bastante similar a los cambios en los conjuntos de origen sugeridos en las otras respuestas.
Desde la perspectiva del usuario, no veo un beneficio real para mantener los archivos fuente en jerarquías de carpetas separadas, ya que hace que encontrar las cosas sea más difícil. También es probable que migre sus clases entre Java y Groovy para seleccionar la implementación óptima.
La principal ventaja es que funciona de la caja sin ninguna configuración en el script de compilación de Gradle. Por lo tanto, ayuda a mantener las cosas simples.