Gradle compileJava无法从源文件中找到符号

Jor*_*ire 14 java eclipse war gradle

我是Gradle的新手,所以我有可能在这里遗漏一些明显的东西.我正在使用Gradle来自动构建我们的项目.我已经解决了大部分问题,但其中一个问题让我无休止地陷入困境.由于这是我的公司,我不能分享任何真正的代码,但我会尽我所能提供逼真的伪代码.

我正在尝试使用flex前端和java后端编译Web应用程序.现在,我只专注于创建一个带有java的.war文件,然后我将进入flex编译.当我运行以下build.gradle脚本时,它给了我无数的"找不到符号"错误.

apply plugin: 'eclipse'
apply plugin: 'war'

sourceCompatibility = 1.6

repositories {
   mavenCentral()
}

sourceSets.main.java.srcDir 'src'
sourceSets.main.resources.srcDir 'src'

webAppDirName = "WebContent"

war.archiveName "Gradle_test.war"

dependencies {
    compile fileTree(dir: 'WebContent/WEB-INF/lib', include: '*.jar')
    providedCompile 'org.apache.tomcat:catalina:6.0.13'
    providedCompile 'org.apache.tomcat:dbcp:6.0.13'
}
Run Code Online (Sandbox Code Playgroud)

发生错误的一个示例(假包和类名称):

/Users/user/Documents/eclipse/ProjectName/src/com/companyName/teamName/projectName/core/release/subProjectName/projectVersion/RenamedObject.java:385: cannot find symbol
symbol  : class OtherObject
location: class com.companyName.teamName.projectName.core.release.subProjectName.projectVersion.RenamedObject
    public class InnerClass extends OtherObject implements Indexable<String>, Serializable {
Run Code Online (Sandbox Code Playgroud)

类InnerClass与RenamedObject类一起在RenamedObject.java文件中声明.它找不到的符号,OtherObject,不是来自.jar.它是存储在的源文件/Users/user/Documents/eclipse/ProjectName/src/com/companyName/teamName/projectName/core/release/subProjectName/projectVersion/superTypes/OtherObject.java.该对象在RenamedObject.java的顶部导入,可以通过eclipse构建和运行,无需任何特殊设置.gradle war从终端执行后,在:compileJava任务期间发生这些错误.

Gradle是否有任何理由处理来自这样的子包的源导入?我只是做错了吗?如果有更多信息可以提供帮助,请告诉我,如果可以,我会提供.

编辑:我得到了它的工作.所有130个错误都通过一次更改得以解决.如果我将完全限定的包名称添加到extends中的OtherObject,那么它看起来像这样:

public class InnerClass extends com.companyName.teamName.projectName.core.release.subProjectName.projectVersion.superTypes.OtherObject implements Indexable<String>, Serializable {
Run Code Online (Sandbox Code Playgroud)

这一改变使一切顺利,但我仍然不明白其中的原因.这不是项目中对OtherObject的唯一引用,它不是内部类扩展另一个源包中定义的类的唯一位置.

act*_*ota 11

症状

无法使用Gradle分发' https://services.gradle.org/distributions/gradle-2.8-bin.zip ' 执行构建

...... .....

引起:org.gradle.api.internal.tasks.compile.CompilationFailedException:编译失败; 请参阅编译器错误输出以获取详细信

Gradle Build报告您应该检查编译器Java输出.

检查输出并查看它在输出中引用的哪个类名称无法解析.

symbol:  class <referenced_classname_here
location: class <parent_classname_here
Run Code Online (Sandbox Code Playgroud)

提供完全限定的域名,无论您在哪里引用作为未解析的符号提及的类.

在我的例子中,我已经看到了这个,当我定义了一个内部类,它扩展了我在build.gradle中声明为依赖的库中的类.

PS:

我已经看到,对此问题的解决方案已被提及作为对OP问题的评论.

我找不到这个问题,因为它没有谷歌的正确关键词,也没有可接受的解决方案,这进一步降低了它的知名度.

结果这是一整天的浪费,在我意识到这个愚蠢的hackish解决方案之前拔掉了几股头发:( :(

我已尝试在Sun下与依赖项解析远程相关的所有内容来修复此"依赖性问题",这对我的代码库来说从来都不是问题.

希望Gradle团队在更多人拔头发之前尽快修复此问题.

顺便说一下......我喜欢Gradle.:)

  • 只是跟进,这仍然是Gradle 4.5中的一个问题. (2认同)