Come aggiungere -Xlint: deselezionato per il mio progetto basato su Android Gradle?


138

Ho provato ad aggiungere quanto segue al build.gradlefile root :

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

Ma sto ottenendo questo:

FAILURE: Build failed with an exception.

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

Che cosa sto facendo di sbagliato?


Va tutto bene con un solo parametro come options.compilerArgs << "-Xlint: deprecation" ??
— Shakalaca,

1
Sì funziona. Ho cambiato "-Xlint:unchecked" << "-Xlint:deprecation"e ha funzionato per entrambi :) Se vuoi creare una risposta con questo, lo segnerò volentieri come accettato.
— rfgamaral,

@RicardoAmaral forse dovresti rispondere tu stesso formalmente e fare riferimento al commento di questo shakalaca.
— Dandre Allison,

Risposte:


232

Questo è ciò che ha funzionato per me: (nel build.gradle del tuo progetto)

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

1
Come lo faresti solo per il modulo principale, escluse le dipendenze?
— aleb,

4
@aleb, suppongo che intendi applicare solo l'impostazione al build.gradle corrente e non a tutti i build.gradle (ovvero tutti i progetti). In tal caso, non avvolgerlo in una allprojectschiusura.
— TheChrisPratt,

Questo dovrebbe fare la differenza sulle piste di Lint? Per qualche motivo, il mio Lint mostra lo stesso identico messaggio di avviso indipendentemente -Xlint:uncheckeddall'impostazione.
— IgorGanapolsky,

Penso che sia meglio aggiungerlo a "build-extras.gradle" invece di "build.gradle".
— Massima

2
Grazie, ha funzionato per me, anche se non sono sicuro da dove provenga questa risposta. Mi sembra ridicolo che per impostazione predefinita la linter genererà un errore senza informazioni sul problema fino a quando non si aggiungono queste opzioni.
— JHS,

55

Disclaimer: anche se questa risposta ha più di 10 voti, non affronta il problema nel contesto di un progetto Android . Tuttavia, Google trova questa domanda nel contesto di progetti non Android. Quindi, mantengo questa risposta per quelle persone.

Secondo JavaCompile , la seguente soluzione sembra essere:

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

Se lo si desidera per i casi di test, utilizzare compileTestJava

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

1
Questo va nel build.gradle di livello superiore o nel modulo?
— IgorGanapolsky,

5
Nel file build.gradle del modulo.
— Dr. Simon Harrer,

3
Puoi espandere il contesto di quel primo frammento? Dove gradle.buildva?
— not2qubit

Questa soluzione funziona per i moduli che applicano il javaplugin nel loro build.gradlefile ma non per i moduli che applicano il plugin com.android.applicationo com.android.library.
— Adil Hussain,

2
@koppor: vedi il commento precedente. Non funziona per gli sviluppatori Android. Che è un problema per un thread intitolato "... progetto basato su Android Gradle".
— Robin Davies,

7

Inserisci questo nel tuo file build.gradle (directory principale):

allprojects { // Projects
   gradle.projectsEvaluated {
      tasks.withType(JavaCompile) {
         options.encoding = 'UTF-8'
         options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
      }
   }
}

4

Per tutti gli utenti utilizzare gradle.ktsquanto segue per abbinare il build.gradlefile semplice

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

Ho avuto un argomento di compilazione diverso da impostare. Quanto segue funziona per me.

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

Devi impostare il percorso di classe di avvio per JDK 1.8 e versioni successive per cose come classi Unsafe e sun.swing. *. Correggi il codice sorgente soprattutto per quest'ultimo, perché Jigsaw Java 9, l'imminente implementazione della modularità per JRE, renderà finalmente inaccessibili questi metodi (!). Considerati avvisato.


0

Non sono sicuro che il problema riguardasse l'uso del subprojectsparametro di configurazione Gradle , ma la sintassi che hai usato:

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

Questo ha funzionato per me:

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

o

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

Se vuoi solo aggiungere un'opzione (normalmente ne aggiungeresti altre), all'interno dell'attività JavaCompiledevi solo aggiungere:

options.compilerArgs << "-Xlint:unchecked"

Puoi trovare ulteriori informazioni su Lint qui e qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.