IntelliJ IDEA build by Gradle
build projektu u nás nedělá přímo IntelliJ IDEA ale deleguje to na Gradle
Idea Settings-> Gradle -> Runner -> Checkbox ‘Delegate IDE build/run actions to gradle’
Poznámky:
- při buildu idea spouští tyhle tasky z gradlu :classes :testClasses
Jak Debugovat
gradlew.bat <task> --no-daemon -Dorg.gradle.debug=true
- pak se připojit remote debuggerem na port 5005
- Příklad nastavení v IntelliJ IDEA:
- Příklad nastavení v IntelliJ IDEA:
ALE pozor! - build nejde spustit, pokud už předtím daemon běží
- v tom potřeba je potřeba ho vypnout
gradlew.bat --stop
(to zastaví daemony)
Kam jde dát breakpoint:
- jde do buildSrc
- nešlo mi dát přímo do tasku v build.gradle.kts
- nešlo mi dát do metody v build.gradle.kts (to v groovy gradlu fungovalo)
Parallelní build
používáme parallelní build java org.gradle.parallel=true
Proto pozor tasky, které na sobě nejsou závislé se spustí parallelně to znamená:
gradlew test uploadTestResults
zde je nutné mít nastavenou závislost mezi tasky např:
tasks {
val test by tasks.getting
val uploadTestResults by tasks.creating {
dependsOn(test)
doLast {
... process test resutls ...
}
}
}
exclude task
V případě, vyjímečně chci spustit task bez jeho závislostí (např. když ho píšu) lze
gradlew uploadTestResults -x test
- spustí ‘uploadTestResults’ bez tasku ‘test’
V konfiguraci tasku jde upravit jakékoliv parametry např:
gradle.startParameter.excludedTaskNames += "myTaskToExclude"
Logování v build scriptu
V build.gradle.kts je k dispzici variabla logger.
Gradle přidává novou logovací uroveň lifecycle
a quiet
error, quiet, warning, lifecycle, info, debug
Výchozí úroven logovaní NENI info, ale LIFECYCLE !!!
gradlew <myTask> --info - spusti příkaz s urovní info
Detaily zde: Gradle Logging
Jak získat logger uvnit buildSrc
val logger = Logging.getLogger(this.javaClass)
kde Logging je: import org.gradle.api.logging.Logging
Pak lze už normálně logovat:
logger.lifecycle("My log message")
Nastavení tasku
Vše patří do build.gradle.kts sekce tasks { ... }
Získání existujícího tasku:
val test by tasks.getting
Vytvoření nového tasku:
val jasmineResultsParser by tasks.creating {
doLast {
... what task should do ...
}
}
validator, který zjistí zda je task “up to date”:
mytask {
outputs.upToDateWhen { myFile.exists() }
}
Spouštět task jen v případě, že se spustí jiný task (=není excludovaný)
onlyIf{
gradle.taskGraph.hasTask("mySubModule:test")
}
Další
Dependencies
gradlew :nuc-common:dependencies --configuration testCompile
- vypíše strom závislostí pouze pro podprojekt ‘nuc-common’ a pouze pro konfiguraci ‘testCompile’
zjistit co se spusti
gradlew <myTask> --dry-run
- nespustí příkazy, jen ukáže co by se spustilo
v IntelliJ IDEA nefunguje moc dobře navigace mezi fily
může pomoct plugin ‘Gradle/Maven Navigation’
Dependency management
Zavislosti se vyhodnocují jinak než v Mavenu. Gradle použije vždy nejnovější.
dependencyManagement {
overriddenByDependencies(false)
}
Žádné komentáře:
Okomentovat