Standardize to thrive 1.8 at the BrabantJUG

RickOssendrijver1 19 views 51 slides Jun 12, 2024
Slide 1
Slide 1 of 51
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51

About This Presentation

Slides that were used during the presentation given at the BrabantJUG.


Slide Content

Rick Ossendrijver
Standardize to thrive

2 • February-24
Understanding and reading code
“developers on average spend as
much as 58% of their time
comprehending existing source code”
- Felienne Hermans

3 • February-24

4 • February-24
Migrate!

5 • February-24
TestNG -> JUnit

6 • February-24
Your Product Owner…

7 • February-24
Automation is key

8 • February-24
Picnic’s Java Platform Team1
Centralized Maven configuration2
Agenda
Dependency management3
Shared libraries4
Static analysis tools5
Automation tools6

9 • February-24
Picnic Tech
30
0
Engineers
35
Teams
5M
Lines of code

10 • February-24

Make developers thrive
Building blocks for
developers

Multiplier effect

Convention over
configuration

Coding standards

Best practices

Centralized
configuration
AutomationDeveloper productivity Uniformity
Code quality

Reducing technical
debt

Migrations
9

12 • February-24
Java Platform Team
40 modules
Shared libraries Developer tooling
CI / CD
Monitoring

13 • February-24
Picnic’s Java Platform Team1
Centralized Maven configuration2
Agenda
Dependency management3
Shared libraries4
Static analysis tools5
Automation tools6

14 • February-24
Maven Parent POM

Shared Libraries

Tools
Picnic Java support modules

15 • February-24
Plugins

16 • February-24
Maven license plugin
[WARNING] License: 'Affero General Public License (AGPL)'
used by 1 dependencies:
- Example dependency that uses AGPL.
(com.example.dependency:example:12.1.3 -
https://github.com/example/dependency)
[...]
[ERROR] Failed to execute goal
org.codehaus.mojo:license-maven-plugin:2.3.0:add-third-pa
rty (check-third-party-licenses) on project picnic-meta:
There are some forbidden licenses used, please check your
dependencies.
[...]

17 • February-24
Profiles

18 • February-24
Picnic’s Java Platform Team1
Centralized Maven configuration2
Agenda
Dependency management3
Shared libraries4
Static analysis tools5
Automation tools6

19 • February-24
Maven dependency management

20 • February-24
Maven dependency management

21 • February-24
Dependency Upgrades at Picnic
Assign reviewers

Labels

Package managers

Automerge
Renovatebot / renovate
Universal dependency update tool that
fits into your workflows.

22 • February-24 22

23 • February-24
Maven enforcer plugin
[ERROR] Rule 1: DependencyConvergence failed with message:
[ERROR] Failed while enforcing releasability.
[ERROR] Dependency convergence error for
com.google.guava:guava:jar:31.1-jre paths to dependency are:
[...]
[ERROR] +-tech.picnic.example:example-api:jar:0.0.0-SNAPSHOT
[ERROR] +-com.google.guava:guava:jar: 31.1-jre:compile
[ERROR] and
[ERROR] +-tech.picnic.example:example-api:jar:0.0.0-SNAPSHOT
[ERROR] +-com.google.truth:truth:jar:1.1.3:compile
[ERROR] +-com.google.guava:guava:jar: 32.1.3-jre:compile

24 • February-24
Maven dependency plugin
[INFO] --- maven-dependency-plugin:3.6.1:analyze-only
(analyze-dependencies) @ cache-support ---
[ERROR] Unused declared dependencies found:
[ERROR] com.google.guava:guava:jar:32.1.3-jre:compile
[...]
[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-dependency-plugin:3.6.1
:analyze-only (analyze-dependencies) on project
cache-support: Dependency problems found

25 • February-24
Picnic’s Java Platform Team1
Centralized Maven configuration2
Agenda
Dependency management3
Shared libraries4
Static analysis tools5
Automation tools6

26 • February-24
Shared Libraries

27 • February-24
Shared Libraries

28 • February-24

29 • February-24

30 • February-24

31 • February-24
Upgrades
Support 2 major versions

Smooth upgrades

32 • February-24
Picnic’s Java Platform Team1
Centralized Maven configuration2
Agenda
Dependency management3
Shared libraries4
Static analysis tools5
Automation tools6

33 • February-24
Static analysis
checkstyle/checkstyle
Helps programmers write Java code
that adheres to a coding standard.
SonarSource/sonarqube
Continuous Inspection.

34 • February-24
Automation
Google/google-java-format
Reformats Java source code to comply
with Google Java Style.

35 • February-24
ArchUnit
https://www.archunit.org
▪Architecture rules
▪API
▪Domain logic

36 • February-24
ArchUnit
https://www.archunit.org

37 • February-24
ArchUnit

38 • February-24
Picnic’s Java Platform Team1
Centralized Maven configuration2
Agenda
Dependency management3
Shared libraries4
Static analysis tools5
Automation tools6

39 • February-24
Open-source static analysis
Automated bug fixing
500+ Error Prone checks
Refaster
Error Prone
Google/error-prone
Catch common Java mistakes
as compile-time errors

40 • February-24
Refaster rule

41 • February-24
Picnic open-sourced: Error Prone Support!
900+ Refaster rules
40+ Error Prone bug checks
Migrations
https://error-prone.picnic.tech

42 • February-24
Refaster

43 • February-24
Error Prone BugPattern

44 • February-24
OpenRewrite
Large scale refactoring

Recipes

Migrations

45 • February-24
OpenRewrite
https://docs.openrewrite.org/recipes/java/spring/boot3/upgradespringboot_3_0

46 • February-24
Spring Boot 2 -> 3 migration
We migrated over 3M lines of code in 70+ repositories!

47 • February-24
Picnic x Moderne
+

48 • February-24
Reference configuration
PicnicSupermarket/
error-prone-support
Error Prone extensions: extra bug
checkers and Refaster rules.
https://github.com/PicnicSupermarket/error-prone-support
See the `pom.xml`

49 • February-24
Picnic

50 • February-24
The fellowship of the Java Platform Team

Jarmila Kaiser Oksana Evseeva
Pieter Dirk Soels
Luca Hennart Nathan Kooij
Rick Ossendrijver Stephan Schroevers
Picnic
Lexicographically ordered, how we like it.

51 • February-24
Questions and feedback!
blog.picnic.nl
https://error-prone.picnic.tech
join.picnic.app
rickie rick_ossies
Tags