Gradle compileJava не может найти символ из исходного файла
Я новичок в Gradle, поэтому есть шанс, что я упустил что-то очевидное здесь. Я работаю над использованием Gradle для автоматизированного построения наших проектов. Я справился с большинством из них, но один из них вызывает у меня бесконечные неприятности. Поскольку это для моей компании, я не могу использовать какой-либо реальный код, но я сделаю все возможное, чтобы обеспечить реалистичный псевдокод.
Я пытаюсь скомпилировать веб-приложение с интерфейсом flex front-end и java. Прямо сейчас, я сосредоточен исключительно на создании файла .war с java в нем, тогда я перейду в компиляцию flex. Когда я запускаю следующий build.gradle script, он дает мне бесчисленные ошибки "не найти символ".
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.java вместе с классом RenamedObject. Символ, который он не может найти, OtherObject, не из .jar. Это исходный файл, хранящийся в /Users/user/Documents/eclipse/ProjectName/src/com/companyName/teamName/projectName/core/release/subProjectName/projectVersion/superTypes/OtherObject.java
. Объект импортируется вверху RenamedObject.java и может быть правильно создан и запущен через eclipse без каких-либо специальных настроек. Эти ошибки возникают во время задачи: compileJava после выполнения gradle war
из терминала.
Есть ли причина, по которой Gradle будет иметь проблему с обработкой импорта исходного кода из подпакета, как это? Я просто делаю что-то неправильно? Дайте мне знать, если есть какая-либо дополнительная информация, которая может помочь, и я предоставил ее, если смогу.
РЕДАКТОР: Я заработал. Все 130 ошибок были разрешены с одним изменением. Если я добавлю полное имя пакета в OtherObject в extends, это выглядит так:
public class InnerClass extends com.companyName.teamName.projectName.core.release.subProjectName.projectVersion.superTypes.OtherObject implements Indexable<String>, Serializable {
Это одно изменение заставило все это работать, но я до сих пор не понимаю причину. Это не единственная ссылка на OtherObject в проекте, и это не единственное место, где внутренний класс расширяет класс, определенный в другом исходном пакете.
Ответы
Ответ 1
Симптомы
Не удалось выполнить сборку с использованием Gradle distribution 'https://services.gradle.org/distributions/gradle-2.8-bin.zip'
............
Вызвано: org.gradle.api.internal.tasks.compile.CompilationFailedException: Ошибка компиляции; для получения подробной информации см. вывод ошибки компилятора.
Gradle Build Reports, чтобы вы проверяли выход Java-компилятора.
Проверьте вывод и посмотрите, какое имя класса он ссылается на вывод, который он не может решить.
symbol: class <referenced_classname_here
location: class <parent_classname_here
Решение
Предоставьте полное доменное имя везде, где вы ссылаетесь на класс, который упоминается как символ, не разрешен.
В моем случае я видел это, когда я определил Внутренний класс, который расширяет класс в библиотеке, которую я объявил как зависимость в моем файле build.gradle.
P.S:
Я видел, что решение для этого уже упоминалось как комментарий к вопросу OP.
Я не мог найти этот вопрос поскольку у него не было правильных ключевых слов для Google, а также не было которое еще больше уменьшило его видимость.
Результат этого - ОДИН ПОЛНЫЙ ДЕНЬ ОТХОДИЛСЯ, несколько нитей волос вырвались, прежде чем я понял это глупое хакерское решение:(: (
Я пробовал все под солнцем, которое дистанционно связано с разрешением зависимости, чтобы исправить эту "проблему зависимостей", которая никогда не была проблемой с моей кодовой базой.
Надеемся, что команда Gradle исправляет это как можно скорее прежде чем больше людей вырвет их волосы.
Btw... Я люблю Gradle.:)
Ответ 2
Просто добавив в базу знаний, но у меня была такая же проблема:
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.
Ответ 3
У меня сегодня была такая же проблема. Если вы работаете с gradle, убедитесь, что ваш класс находится в src/main/java, а не в src/test/java, в противном случае ваша IDE (например, Eclipse) скажет, что все компиляции найдены, но когда вы попытаетесь собрать с помощью gradle, протестируйте классы не включены по умолчанию (и это нормально!), поэтому он не будет компилироваться.