web-dev-qa-db-ja.com

gradleの使い方。 JavaとGroovyは一緒ですか?

IntelliJ 13でGradleプロジェクトを使用しようとしていますが、次のような問題が発生しています。

  • JavaファイルがGroovyファイルを参照できない
  • IntelliJはGroovyのことを忘れているようで、GDKを構成するように求められます

GroovyプラグインはGroovyとJavaが独自のソースパスで混在することを許可しますが、Javaは独自のパスを必要とします。したがって、次のディレクトリ構造になります。

  • src\main\groovy
  • src\main\Java
  • src\test\groovy

JavaとGroovyクラスが混在しています

これが私の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/main/Java/com/product/service/FileDownloadService.Java:24:  cannot find symbol 
symbol  : class FileDownload 
location: class com.product.service.FileDownloadService

private FileDownload fileDownload;

すべてをJavaにすると、コンパイルエラーや実行エラーは発生しません。

18
sonoerin

ファイル「build.gradle」に次の行を追加しようとします

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

私の悪い英語を失礼します。これがあなたの解決に役立つことを願っています。

18
arturoeanton

上記のように、groovyプラグインを使用してコンパイルすると、Javaクラスもコンパイルされます。Javaコンパイルタスクがソースとグルーヴィーなタスク...

これを行い、ソースフォルダーを保持します(例:Eclipseの場合)build。グラドル

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でパッケージとして識別されます...

16
leroyse

私の解決策は、両方のJavaおよびGroovyクラスをsrc/main/groovyおよびsrc/test/groovy(テストクラス)。コンパイラの観点からは、他の回答で提案されているsourceSetsへの変更と非常によく似た結果になります。

ユーザーの観点からは、ソースファイルを別のフォルダー階層に保持することが実際の利点であるとは思えません。また、JavaとGroovyの間でクラスを移行して、最適な実装を選択することもできます。

主な利点は、Gradleのビルドスクリプトで構成を行わなくてもすぐに使用できることです。したがって、物事をシンプルに保つのに役立ちます。

2
Tobias Kremer