Java 9 introduced modules as first-class citizens that represents a higher level of aggregation above packages. They allow you to implement more robust software systems by providing stability, cohesiveness, encapsulation, and isolation. Modularizing a 'Hello world' application is pretty straightforward, but it provides only limited benefits. That's because the primary strength of modularization lies in its ability to impose a clear structure on large codebases. However, modularizing a large codebase is not a trivial task. In this talk, we will discuss the difficulties encountered when implementing a real-life modular application and how to overcome them. We will also focus on the usage of build tools such as Gradle and Maven to compile, test, build and run modular applications. In addition, we will explore a series of plugins that automate tasks such as: - creating modular jars that target a Java release before 9 - using JavaFX in Java 11+ applications - creating custom runtime images - packaging native installers The presentation will include both talking and live coding.

Talk Level:
INTERMEDIATE

Bio:
I am a software engineer with more than 15 years of experience in JVM based languages. I am the creator of several Gradle plugins for the Java Module System, such as: - https://github.com/beryx/badass-jlink-plugin - https://github.com/beryx/badass-runtime-plugin - https://github.com/beryx/badass-jar-plugin - https://github.com/moditect/moditect-gradle-plugin I also contributed to other Java Module System plugins, such as: - https://github.com/java9-modularity/gradle-modules-plugin - https://github.com/moditect/moditect