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.