我试图在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,那么我不会得到任何编译或执行错误 .
3 回答
如上所述,使用groovy插件进行编译也将编译java类 . 我们必须确保不会在源代码和groovy任务上触发java编译任务......
为了这个,并保留源文件夹(例如:在eclipse中),您可以在_2396336中使用以下精致的片段:
如果你只是指定
groovy { srcDir "src" }
,你的main/groovy
和main/java
文件夹在eclipse中被识别为包...尝试追加文件“build.gradle”的下一行
请原谅我的英语不好 . 我希望这可以帮助您解决问题 .
我的解决方案是将Java和Groovy类放在src / main / groovy和src / test / groovy(用于测试类)中 . 从编译器的角度来看,它会产生与其他答案中建议的sourceSets更改非常相似的内容 .
从用户的角度来看,我没有看到将源文件保存在单独的文件夹层次结构中的真正好处,因为它使得查找更难 . 您也可以在Java和Groovy之间迁移类以选择最佳实现 .
主要的好处是它在Gradle的构建脚本中没有任何配置,开箱即用 . 所以它有助于保持简单 .