2015-09-17 6 views
1

Недавно я использовал Dagger 2 и просто сделал некоторые работы с областями в моем проекте Android, добавив области действия. Пока все работает, строит и проверяет на моей машине. Я получаю ошибку компиляции в Jenkins CI.Ошибка времени компиляции Dagger 2 на CI

FAILURE: Build failed with an exception. 
* What went wrong: 
Execution failed for task ':Adverts:compile***DebugJava' 
.java.lang.ClassCastException: java.lang.String cannot be cast to javax.lang.model.type.TypeMirror 

Это странно, потому что сборка работала до сих пор с помощью кинжала 2 с меньшим количеством генерируемого кода. Когда я перехожу к сгенерированным источникам, некоторые, но не весь код генерируется. Похоже, что он убирает его где-то по пути. И CI, и моя машина используют ту же версию JDK.

У кого-нибудь возникали проблемы с CI & Кинжал 2 раньше?

+0

Это не ошибка Кинжала 2. * Кое-что * настроено по-другому на вашей машине CI. Когда вы компилируете свою локальную машину, выполняете ли вы ее через Android Studio или используете тот же скрипт, что и CI? – vaughandroid

+0

Я использую те же задачи Gradle, чтобы тестировать локально и на CI. Я закончил создание подчиненного osx с той же конфигурацией в нашей настройке jenkins, и это сработало. Это действительно странно, и jdk, и android sdk работают на тех же версиях на главном CI как подчиненный. Единственное различие, которое я могу распознать, - это ОС. –

+1

В этом случае я в тупике. Однако я очень сомневаюсь в том, что кинжал 2 мы виновник, и ошибка, которую вы опубликовали, как представляется, поддерживает это. – vaughandroid

ответ

2

Для людей в будущем, которые также сталкиваются с этой ошибкой, это, скорее всего, из-за класса, который вы удалили, или класса, который не существует, на который ссылается ваш модуль.

Я имел точно такую ​​же ошибку во время компиляции, когда я был такой код:

@Module(includes = { 
     AModuleThatDoesntExist.class 
}) 
public class YourModule { 
} 

Так что я говорю: если вы столкнулись с этой ошибки, проверьте модули Dagger и код загрузчика, там, наверное, там некорректный код.

Что касается того, почему он работает на вашем компьютере, а не на сервере CI: я не знаю. Я предполагаю, что это из-за проблемы с кешем, где файл .class вашего удаленного .java-файла все еще присутствует в вашей локальной файловой системе, поэтому Dapper может его найти, но он не существует на вашем CI-сервере. Если вы все еще можете воспроизвести проблему, возможно, вы можете попробовать запустить «Перестроить» и посмотреть, происходят ли ошибки локально.

+0

Большое спасибо. Я думал, что это выпуск новой Android Studio. – Damon

+0

Спасибо, что спасли мою жизнь – Talha

0

Независимо от того, что обработчик аннотаций Dagger 2 не должен генерировать исключение, поэтому, предполагая, что это исходит от процессора аннотаций Dagger 2, возможно, стоит собрать ошибку, если вы можете создать воспроизводимый пример, предпочтительно простой.

Как другие предложили сделать чистую сборку (удалите классы самостоятельно, чтобы убедиться, что они все ушли) и проверьте различия между вашей машиной и CI.

Смежные вопросы