- Exercism
- Hyperskill projects
- Google's kotlin course
flowchart TD
DataTypes("Kotlin types and collections")
Null("Null safety")
Expressions("Control structures and expressions")
Functions("Functions and lambdas")
Preconditions("require, check, assert")
FP("Functional programming")
Java("Interacting with Java code")
OOP("Classes, data classes")
ValueClasses("Value classes (inline classes)")
Types("Type aliases, enums, sealed classes")
Generics("Generics and variance")
Packaging("Packages and imports")
Destructuring("Destructuring")
Coroutines("Coroutines")
Ktor("Ktor")
Serialization("Serialization")
Test("kotlin.test")
Text("kotlin.text")
Time("kotlin.time")
Reflection("Reflection API")
JCA("Java Cryptography Architecture")
IO("kotlin.io")
DataTypes --> Null
Null --> Expressions
Expressions --> Functions
Functions --> Preconditions
Preconditions --> Destructuring
Destructuring --> FP
Destructuring --> OOP
OOP --> Types
OOP --> Generics
FP --> Packaging
Types --> Packaging
Generics --> Packaging
Packaging --> Test
Test --> Text
Test --> IO
IO --> Time
Time --> Java
Time --> Serialization
Time --> Coroutines
Coroutines --> Ktor
Java --> Reflection
Java --> JCA
OOP --> ValueClasses
style DataTypes fill:#9f9,stroke:#333
style Functions fill:#9f9,stroke:#333
style Preconditions fill:#9f9,stroke:#333
style Null fill:#9f9,stroke:#333
style Expressions fill:#9f9,stroke:#333
style IO fill:#9f9,stroke:#333
style Test fill:#9f9,stroke:#333
style OOP fill:#9f9,stroke:#333
style ValueClasses fill:#9f9,stroke:#333
style Couroutines fill:#9f9,stroke:#333
style Types fill:#9f9,stroke:#333
Spring cheatsheet: https://dzone.com/refcardz/spring-configuration
- Transactions in spring
- Spring kotlin support
- Spring initializr
- Testing spring boot applications
- Hibernate and JPA and spring data
- Spring in action book
flowchart TD
Beans("Bean definition DSL")
Configuration("Configuration")
Injection("Dependency injection via annotations")
SpringMVC("Spring MVC")
JPA("SpringData, JPA")
Flyway("Flyway migrations")
Transactions("Transactions")
Sagas("Saga pattern in Spring")
Beans --> Injection
Injection --> Configuration
Configuration --> SpringMVC
SpringMVC --> JPA
JPA --> Flyway
JPA --> Transactions
Transactions --> Sagas
style Flyway fill:#9f9,stroke:#333
click Transactions href "https://victorrentea.teachable.com/p/transactions-in-spring" "Transactions course"
- Use https://play.kotlinlang.org/ for trying stuff out, and sharing for feedback
- If the project won't build properly...
- Run a clean gradle build
./gradlew clean build
- If dependencies changed, make sure to update the lockfile
./gradlew dependencies --write-locks
- Idea should be configured to delegate to gradle for build and test
- Use refresh button in gradle toolbar in Idea
- https://www.jetbrains.com/help/idea/invalidate-caches.html
- Run a clean gradle build
- Use https://sdkman.io as jdk version manager
- https://www.jpa-buddy.com/
- Kdoc is the equivalent of javadoc https://kotlinlang.org/docs/kotlin-doc.html
See https://www.baeldung.com/kotlin/gradle-executable-jar
tasks {
val fatJar = register<Jar>("fatJar") {
dependsOn.addAll(listOf("compileJava", "compileKotlin", "processResources")) // We need this for Gradle optimization to work
archiveClassifier.set("standalone") // Naming the jar
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest { attributes(mapOf("Main-Class" to application.mainClass)) } // Provided we set it up in the application plugin configuration
val sourcesMain = sourceSets.main.get()
val contents = configurations.runtimeClasspath.get()
.map { if (it.isDirectory) it else zipTree(it) } +
sourcesMain.output
from(contents)
}
build {
dependsOn(fatJar) // Trigger fat jar creation during build
}
}