Подтвердить что ты не робот

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 в проекте, и это не единственное место, где внутренний класс расширяет класс, определенный в другом исходном пакете.

4b9b3361

Ответ 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, протестируйте классы не включены по умолчанию (и это нормально!), поэтому он не будет компилироваться.