Library / SDK
eugenp/tutorials avatar
eugenp/tutorials

eugenp/tutorials: A Maven Profile System for Managing Hundreds of Spring Examples

Getting Started with Spring Boot 3:. Profile-based segregation ==================== We use Maven build profiles to segregate the huge list of individual projects in our repository.

37,322 stars53,242 forksJavaMIT

At a glance

What is it?
The eugenp/tutorials repository is a large collection of Java and Spring tutorials, organized by Maven profiles that segregate modules by JDK version and test type. This review examines how those profiles work, how to build and run modules, and where the approach creates friction.
Who is it for?
Adopt eugenp/tutorials if you are a Java or Spring developer looking for a broad set of small, focused examples that you can build and run individually. Do not adopt it if you need a curated, dependency-managed library or if you expect a single command to build everything quickly.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What This Repository Actually Solves

The eugenp/tutorials repository solves a practical problem for anyone who wants a large set of Java and Spring examples without maintaining their own collection. It holds hundreds of small, focused tutorials, each covering a single area of the Java ecosystem, with a strong focus on Spring, Spring Boot, and Spring Security. The intended audience is developers who need a working example for a specific topic, such as a particular Spring Boot feature or a Java API. The repository's value lies in its breadth and in the fact that each module is meant to be built and run independently. It is not a library you add as a dependency; it is a source of runnable code you can inspect and adapt.

The Maven Profile System: How Segregation Works

The core mechanism is Maven build profiles. The repository divides its projects into eight lists: default, default-jdk17, default-jdk22, default-jdk23, default-jdk24, default-jdk25, default-jdk8, and default-heavy. Each list corresponds to a JDK version or a special category for heavy or long-running projects. Then each list is split again by test type: unit tests or integration tests. That produces profiles like default-jdk17 for unit tests and integration-jdk17 for integration tests. There is also a parents profile that builds only parent modules. In total, the README lists 17 profiles, including combinations for JDK26 and heavy projects. The naming convention is consistent: default-* for unit tests, integration-* for integration tests. This design lets you build only the modules that match your JDK and test needs, avoiding the cost of building everything.

Building the Whole Repository vs. Single Modules

The README gives explicit commands for both scenarios. To build the entire repository with unit tests, you run `mvn clean install -Pdefault,default-heavy`. For integration tests, the command is `mvn clean install -Pintegration,integration-heavy`. JDK8 projects have their own commands: `mvn clean install -Pdefault-jdk8` and `mvn clean install -Pintegration-jdk8`. For a single module, you can run `mvn clean install` inside the module directory. If the module belongs to a parent module like `parent-boot-1` or `parent-spring-5`, you must build the parent first using the `parents` profile: `mvn clean install -Pparents`. From the root, you can build specific modules with `mvn clean install --pl akka-modules,algorithms-modules -Pdefault`. This flexibility is useful, but it also means you need to know which profile contains your module.

Running a Spring Boot Module and Working with an IDE

For Spring Boot modules, the README says to run `mvn spring-boot:run` in the module directory. That is straightforward. For IDE work, the advice is to import only the module you are working on, not the entire repository. The repository is large, and importing all modules would be slow and unwieldy. The README explicitly says there is no need to import all of them. This is a sensible workflow, but it has a consequence: you must know your module's dependencies and parent structure. If a module depends on a parent that is not installed in your local Maven repository, you will need to build that parent first. The IDE advice is practical, but the burden of managing parent modules falls on you.

Test Execution: Unit and Integration Profiles

The profile system also controls which tests run. Running `mvn clean install` inside a module runs its unit tests. For Spring modules, this also runs `SpringContextTest` if present. To run integration tests, you use a profile like `mvn clean install -Pintegration` or `-Pintegration-heavy` or `-Pintegration-jdk8`, depending on where the module lives. The distinction matters because integration tests are often slower and may require external resources. The profile names make the intent clear, but you need to know which list your module belongs to. The README does not explain how to determine that list for a given module; you have to inspect the repository structure or the profile definitions. That is a gap in the documentation.

Limitations and Failure Modes

The biggest limitation is the sheer size of the repository. Building the entire thing, even with profiles, can take a long time. The README acknowledges this by saying it should not be needed often, but the profile system is a workaround, not a cure. Another failure mode is the parent module dependency. If you build a module without first building its parent, Maven will fail because the parent artifact is not in your local repository. The README tells you to use the `parents` profile, but it does not list which modules depend on which parents. You have to discover that yourself. A third issue is the JDK version mismatch. If you are on JDK21 but try to build a JDK17 module, the profile may not match, and the build can fail. The profiles are explicit, but you must be careful to use the right one. For someone who just wants a quick example, these steps add friction.

A Real Alternative: Spring Initializr and Official Samples

An alternative for getting a Spring Boot example is Spring Initializr (start.spring.io), which generates a single, self-contained project with no parent modules and no profile system. The difference is fundamental: Initializr gives you a fresh project with only the dependencies you choose, while eugenp/tutorials gives you a pre-built example embedded in a large multi-module structure. Initializr avoids the parent dependency problem and the need to select a profile. However, it does not give you a curated set of examples for specific topics like Spring Security or REST. The official Spring samples repository on GitHub is another alternative; it tends to have smaller, standalone projects. The trade-off is that eugenp/tutorials covers far more topics, but with more setup overhead. For a quick, isolated example, Initializr is faster. For a deep dive into a niche feature, this repository is more likely to have what you need.

Maintenance and License Considerations

The repository is licensed under MIT, which means you can use the code in your own projects with minimal restrictions. The README does not mention any maintenance schedule or release cadence. There are no recent releases listed, and the last push is unknown, so you cannot rely on a stable release cycle. The repository is actively used by the Baeldung site, as indicated by the course links, but that does not guarantee frequent updates. The profile list includes JDK26, which suggests the project tracks new JDK versions, but you should verify the state of the branch before assuming it is current. The maintenance cost for you is low if you only copy a single module, but higher if you try to keep a fork in sync, because the repository is large and changes frequently. The MIT license is permissive, but you should still check the specific code you use for any third-party dependencies with different licenses.

Editorial conclusion

Adopt eugenp/tutorials if you are a Java or Spring developer looking for a broad set of small, focused examples that you can build and run individually. Do not adopt it if you need a curated, dependency-managed library or if you expect a single command to build everything quickly. Before using it, verify which JDK version your module targets and whether it belongs to a parent module. Check the profiles table to pick the right profile for unit or integration tests. If you plan to build from the root, confirm that your module is listed in the default or another profile. This repository is a reference collection, not a framework, and its value depends on your willingness to navigate its profile system.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
Community notes

Community notes