Як додати -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

Що я роблю неправильно?


Чи все гаразд із лише одним параметром, таким як options.compilerArgs << "-Xlint: deprecation" ??
shakalaca

1
Так, це працює. Я змінився, "-Xlint:unchecked" << "-Xlint:deprecation"і він працював для обох :) Якщо ви хочете створити відповідь на це, я з радістю відзначу це як прийняте.
rfgamaral

@RicardoAmaral, можливо, вам варто просто відповісти на це формально і надіслати коментар цього шакалака.
Дандре Еллісон

Відповіді:


232

Це працювало для мене: (у build.gradle вашого проекту)

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

1
Як би ви це зробили лише для основного модуля, виключаючи залежності?
алеб

4
@aleb, я припускаю, що ви маєте на увазі застосувати лише налаштування до поточного build.gradle, а не до всіх build.gradle (тобто до всіхprojects). У такому випадку не заварюйте його в allprojectsзакриття.
TheChrisPratt

Це, мабуть, має значення для запуску 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"
}

1
Чи йде це у верхньому рівні build.gradle чи модулі?
ІгорГанапольський

5
У файлі build.gradle модуля.
доктор Саймон Харрер

3
Чи можете ви розширити контекст цього першого фрагмента? Куди gradle.buildце іде?
not2qubit

Це рішення працює для модулів, які застосовують javaплагін у своєму build.gradleфайлі, але не для модулів, які застосовують com.android.applicationабо com.android.libraryплагін.
Аділ Хуссей

2
@koppor: дивіться попередній коментар. Не працює для Android розробників. Що є проблемою для потоку під назвою "... проект на базі Android Gradle".
Робін Девіс

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"
    }
}

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


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 тут і тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.