Как добавить -Xlint: не отмечен в моем проекте на базе Android Gradle?

138

Я попытался добавить следующее в корневой build.gradleфайл:

subprojects {
    gradle.projectsEvaluated {
        tasks.withType(Compile) {
            options.compilerArgs << "-Xlint:unchecked -Xlint:deprecation"
        }
    }
}

Но я получаю это:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Libraries:ActionBarSherlock:compileRelease'.
> invalid flag: -Xlint:unchecked -Xlint:deprecation

Что я делаю не так?

rfgamaral
источник
Все ли в порядке только с одним параметром, таким как options.compilerArgs << "-Xlint: deprecation" ??
Шакалака
1
Да, это работает. Я изменился на, "-Xlint:unchecked" << "-Xlint:deprecation"и это сработало для обоих :) Если вы хотите создать ответ с этим, я с радостью отмечу его как принятый.
rfgamaral
@RicardoAmaral, может быть, вы просто должны ответить на него самостоятельно и сослаться на комментарий этой шакалы.
Дандре Эллисон

Ответы:

232

Вот что сработало для меня: (в build.gradle вашего проекта)

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
Фелипе Лима
источник
1
Как бы вы сделали это только для основного модуля, исключая зависимости?
aleb
4
@aleb, я предполагаю, что вы имеете в виду только применить настройку к текущему build.gradle, а не ко всем build.gradle (т.е. ко всем проектам). В этом случае не оборачивайте это в allprojectsзакрытие.
TheChrisPratt
Это должно иметь значение на пробегах Lint? По какой-то причине мой Lint отображает одно и то же предупреждающее сообщение независимо от -Xlint:uncheckedнастроек.
Игорь Ганапольский
Я думаю, что лучше добавить его в «build-extras.gradle» вместо «build.gradle».
Максим
2
Спасибо, это сработало для меня, хотя я не уверен, откуда пришел этот ответ. Мне кажется смешным, что по умолчанию линтер выдаст ошибку без информации о проблеме, пока вы не добавите эти опции.
JHS
55

Отказ от ответственности: хотя этот ответ имеет более 10 голосов, он не решает проблему в контексте проекта Android . Тем не менее, Google находит этот вопрос в контексте не Android-проектов. Таким образом, я держу этот ответ для тех людей.

Согласно JavaCompile , решение выглядит следующим образом:

compileJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}

Если вы хотите, чтобы это было для тестовых случаев, используйте compileTestJava

compileTestJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
koppor
источник
1
Это идет в сборке верхнего уровня build.gradle или в модуле?
Игорь Ганапольский
5
В файле build.gradle модуля.
Доктор Саймон Харрер
3
Можете ли вы расширить контекст этого первого фрагмента? Куда gradle.buildэто идет?
not2qubit
Это решение работает для модулей, которые применяют javaплагин в своем build.gradleфайле, но не для модулей, которые применяют плагин com.android.applicationили com.android.library.
Адиль Хуссейн
2
@koppor: см. предыдущий комментарий. Не работает для разработчиков Android. Что является проблемой для темы под названием "... Android Gradle Based Project".
Робин Дэвис
7

Поместите это в свой файл build.gradle (корневой каталог):

allprojects { // Projects
   gradle.projectsEvaluated {
      tasks.withType(JavaCompile) {
         options.encoding = 'UTF-8'
         options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
      }
   }
}
Юша Алеауб
источник
4

Для всех, кто использует, gradle.ktsиспользуйте следующее, чтобы соответствовать простому build.gradleфайлу

build.gradle.kts

afterEvaluate {
        tasks.withType(JavaCompile::class) {
            options.compilerArgs.add("-Xlint:unchecked")
            options.compilerArgs.add("-Xlint:deprecation")
        }
    }

build.gradle

 gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
Дипали с.
источник
3

У меня был другой аргумент компиляции для установки. Следующее работает для меня.

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-XDignore.symbol.file"
        options.bootClasspath = "$System.env.JAVA_HOME/jre/lib/rt.jar"
    }
}

Вы должны установить загрузочный classpath для JDK 1.8 и выше для таких вещей, как классы Unsafe и sun.swing. *. Исправьте исходный код специально для последнего, потому что Jigsaw Java 9, будущая и модульная реализация JRE, в конечном итоге сделает эти методы недоступными (!). Считай себя предупрежденным.

peter_pilgrim
источник
0

Я не уверен, что проблема заключалась в использовании subprojectsпараметра конфигурации Gradle , но вы использовали синтаксис:

options.compilerArgs << "-Xlint:unchecked -Xlint:deprecation"

Это сработало для меня:

subprojects {
  gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
      options.compilerArgs += [
        '-Xlint:unchecked', // Shows information about unchecked or unsafe operations.
        '-Xlint:deprecation', // Shows information about deprecated members.
      ]
    }
  }
}

или

subprojects {
  gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
      options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
  }
}

Если вы хотите добавить только одну опцию (вы обычно добавляете больше), внутри задачи JavaCompileвам просто нужно добавить:

options.compilerArgs << "-Xlint:unchecked"

Вы можете найти больше информации о Lint здесь и здесь .

cesards
источник