我是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 {
类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 {
这一改变使一切顺利,但我仍然不明白其中的原因。这不是项目中对OtherObject的唯一引用,它不是内部类扩展另一个源包中定义的类的唯一位置。
答案 0 :(得分:11)
无法使用Gradle分发&#39; https://services.gradle.org/distributions/gradle-2.8-bin.zip&#39;
执行构建
...... .... .....
引起: org.gradle.api.internal.tasks.compile.CompilationFailedException: 编译失败;有关详细信息,请参阅编译器错误输出。
Gradle Build报告您应该检查编译器Java输出。
检查输出并查看它在输出中引用的哪个类名称无法解析。
symbol: class <referenced_classname_here
location: class <parent_classname_here
提供完全限定的域名,无论您在何处引用未提及的符号提及的类。
就我而言,当我定义一个内部类时,我已经看到了这一点,它扩展了我在build.gradle中声明为依赖项的库中的类。
<强> P.S:强>
我已经看到解决方案已经被提到了 OP对问题的评论。
我找不到这个问题 因为谷歌没有合适的关键词,也没有 已接受的解决方案,进一步降低了
结果这是一整天的浪费,在我意识到这个愚蠢的黑客解决方案之前,已经拔掉了几股头发:(:
我已尝试在Sun下与依赖项解析远程相关的所有内容来修复此问题&#34;依赖性问题&#34;这从来都不是我的代码库的问题。
希望Gradle团队尽快修复此问题 在更多人拔头发之前。
顺便说一句......我喜欢Gradle。 :)
答案 1 :(得分:1)
只是添加到知识库中,但我遇到了同样类型的问题:
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。
答案 2 :(得分:0)
今天我在这里遇到了同样的问题。 如果使用gradle,请确保您的类位于src / main / java中,而不是src / test / java中,否则您的IDE(例如Eclipse)会说所有编译都可以找到,但是当您尝试使用gradle进行构建时,请测试类默认情况下不包含(也可以!),因此不会编译。
答案 3 :(得分:0)
几乎有相同的问题:试图构建依赖于另一个已更改模块的模块。第一个模块中调用了第二个模块中的方法,这些方法不可见。 解决方案是在第二个模块中删除文件夹“ build”和“ out”,然后重新构建并构建第一个模块。
答案 4 :(得分:0)
得到了类似的结果,但这仅仅是因为我打开了并行构建(〜/ .gradle.properties中的org.gradle.parallel = true)。不过很奇怪。
我得到的错误: 错误:包com.xxx.yyy不存在 错误:找不到符号
一旦我在〜/ .gradle.properties中设置org.gradle.parallel = false,世界便再次恢复正常。