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

tgabmvqs  于 2022-12-18  发布在  Eclipse
关注(0)|答案(6)|浏览(193)

我是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'
}

发生错误的示例(使用假包名和类名):

/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 {

类InnerClassRenamedObject.java与RenamedObject类沿着在www.example.com文件中声明。它找不到的符号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个错误都通过一个修改得到了解决。如果我在扩展中将完全限定的包名添加到OtherObject中,那么它看起来像这样:

public class InnerClass extends com.companyName.teamName.projectName.core.release.subProjectName.projectVersion.superTypes.OtherObject implements Indexable<String>, Serializable {


这一个改变使所有的工作,但我仍然不明白的原因,这不是唯一的引用OtherObject在项目中,它不是唯一的地方,一个内部类扩展一个类定义在另一个源代码包.

n6lpvg4x

n6lpvg4x1#

**症状

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

原因:org.gradle.API.internal.tasks.compile.编译失败异常:编译失败;详细信息请参见编译器错误输出。

  • Gradle构建报告您应检查编译器Java输出。*

检查输出并查看它在输出中引用了它无法解析的类名。

symbol:  class <referenced_classname_here
location: class <parent_classname_here

解决方案

在引用以符号表示的类时,请提供完全限定的域名。

  • 在我的例子中,我在定义Inner Class时看到了这一点,它扩展了我在build. gradle中声明为依赖项的库中的类。*
    附言:

我看到,对此问题的解决办法已经作为对该问题的评论提到。
我找不到这个问题,因为它没有正确的关键字谷歌,也没有接受的解决方案,进一步降低了其知名度。

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

我已经尝试了Sun下所有与依赖关系解析相关的方法来修复这个“依赖关系问题”,这从来不是我的代码库的问题。
希望Gradle团队在更多的人拔头发之前尽快解决这个问题。
顺便说一句...我喜欢Gradle

2o7dmzc5

2o7dmzc52#

只是添加到知识库,但我有同样类型的问题:

public static class GetNetworkInterfacesCallable implements java.util.concurrent.Callable<java.util.Set<java.net.InetAddress>> {
    public GetNetworkInterfacesCallable(String networkPrefix) {
        this.networkPrefix=networkPrefix;
    }
    @Override public Set<InetAddress> call() throws Exception {
        Thread.currentThread().setName(getClass().getName());
        return null; //myInetAddresses(networkPrefix);
    }
    final String networkPrefix;
}

使用Gradle 2.9和2.10。

6qqygrtg

6qqygrtg3#

如果您使用的是gradle,请确保您的类位于src/main/java而不是src/test/java中,否则您的IDE(例如Eclipse)会说所有编译都找到了,但当您尝试使用gradle构建时,默认情况下不包含测试类(这没关系!),因此它不会编译。

hgqdbh6s

hgqdbh6s4#

几乎有同样的问题:尝试生成的模块依赖于另一个已更改的模块。在第一个模块中调用了第二个模块中的方法,这些方法不可见。解决方案是删除第二个模块中的“build”和“out”文件夹,重新生成该模块,然后生成第一个模块。

9nvpjoqh

9nvpjoqh5#

得到了类似的结果,但那只是因为我打开了并行构建(org.gradle.parallel=true in ~/. gradle.properties)。
我遇到的错误:错误:包com.xxx.yyy不存在错误:找不到符号
一旦我在~/. www.example.com中设置了org.gradle.parallel=falsegradle.properties,世界又开始变得正常起来。

lbsnaicq

lbsnaicq6#

我总是遇到这个错误,尽管您的问题可能与前面的答案有关,但对我来说,这通常只是本地缓存问题,可以通过运行gradle clean来解决。
试试也无妨。

相关问题