Подтвердить что ты не робот

Как использовать gradle. Java и Groovy вместе?

Я пытаюсь использовать проект Gradle в IntelliJ 13, но я продолжаю сталкиваться с такими проблемами, как:

  • Файлы Java не могут видеть файлы Groovy
  • IntelliJ, похоже, забывает о Groovy и предлагает мне настроить GDK для него

Я читал, что плагин Groovy позволяет Groovy и Java в смешанном исходном пути, но Java хочет его собственный. Поэтому у меня есть следующая структура каталогов:

  • ЦСИ\главная\groovy
  • ЦСИ\главная\Java
  • SRC\Test\groovy

У меня есть сочетание Java и Groovy classes

Вот мой 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'
}

И вот ошибка сборки, которую я получаю при запуске " gradle clean build":

... SRC/главная/Java/COM/продукта/услуги/FileDownloadService.java: 24: не может найти символ символа: class FileDownload location: class com.product.service.FileDownloadService     private FileDownload fileDownload;

Если я делаю все Java, то я не получаю ошибок компиляции или выполнения.

4b9b3361

Ответ 1

пытается добавить в файл "build.gradle" следующие строки

sourceSets {
      main {
        java { srcDirs = [] }    // no source dirs for the java compiler
        groovy { srcDir "src" }  // compile everything in src/ with groovy
       }
    }

Извините меня за мой плохой английский. Я надеюсь, что это поможет вашему решению.

Ответ 2

Как упоминалось выше, компиляция с плагином groovy также будет компилировать классы java. Мы просто должны убедиться, что задача компиляции java не запускается в источнике, а также в задаче groovy...

Для этого и сохраним исходные папки (например, в eclipse), вы можете использовать следующий уточненный фрагмент в 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
  }
}

Если вы просто указали groovy { srcDir "src" }, ваши папки main/groovy и main/java идентифицируются как пакеты в eclipse...

Ответ 3

Моим решением было бы иметь как Java, так и Groovy классы, расположенные в src/main/groovy и src/test/groovy (для тестовых классов). С точки зрения компилятора это привело бы к чему-то совершенно аналогичному изменениям исходных наборов, предложенным в других ответах.

С точки зрения пользователя я не вижу реальной выгоды, чтобы сохранить исходные файлы в разных иерархиях папок, поскольку это затрудняет поиск вещей. Также вы можете перенести свои классы между Java и Groovy, чтобы выбрать оптимальную реализацию.

Основное преимущество заключается в том, что он работает без всякой конфигурации в Gradle build script. Таким образом, это помогает держать вещи простыми.