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,310 stars53,056 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 last received commits 3 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

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

From daily snapshots

Star history

  • eugenp/tutorials37,310 ★ · -23
Star history
Repository2026-07-282026-11-12
eugenp/tutorials37.3k37.3k

-23 Stars in the last 107 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial 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. The README text says there are 17 profiles in total, although its table lists 19 rows, 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. The repository has no GitHub releases, and the last push was on 2026-11-01, so there is no release cycle to rely on. 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.

Frequently asked questions

What is the eugenp/tutorials repository?

It is a collection of small and focused tutorials, each covering a single and well-defined area of development in the Java ecosystem, with a strong focus on the Spring Framework including Spring, Spring Boot, and Spring Security, and additional modules covering several other aspects of Java. It is released under the MIT license.

Why do I get an error when cloning eugenp/tutorials?

The repository suggests increasing the git HTTP post buffer with `git config --global http.postBuffer 5000000`, which raises it from the default 1MiB to 5MiB. To revert the value, use `git config --global http.postBuffer 1000000`.

How do I build a single module in eugenp/tutorials?

Run `mvn clean install` in the module directory. If the module belongs to a parent module such as parent-boot-1 or parent-spring-5, build the parents first with `mvn clean install -Pparents`. From the repository root you can name modules directly, as in `mvn clean install --pl akka-modules,algorithms-modules -Pdefault`.

How do I run the integration tests in eugenp/tutorials?

Use `mvn clean install -Pintegration`, or `-Pintegration-heavy`, or `-Pintegration-jdk8`, depending on which list your module belongs to. A plain `mvn clean install` inside a module runs the unit tests, and for Spring modules it also runs SpringContextTest if one is present.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/eugenp-tutorials.svg)](https://hysenlabs.com/projects/eugenp-tutorials)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/eugenp-tutorials.svg)](https://hysenlabs.com/projects/eugenp-tutorials)

Was this useful?