I’m more than thrilled to report that MapStruct 1.1 Final has been spotted in the wild! We grew that puppy for almost one year since the announcement of MapStruct 1.0, so it was about time to let it go and put a final release into your hands.
Besides a plethora of bug fixes the 1.1 release adds many new features which should be very welcome to users of MapStruct 1.0:
- Nested target properties
@ValueMappingannotation for enum mappings
@Namedannotation for simple string based mapping qualifiers
- Support for custom
hasXyz()methods to check the presence of source properties instead of null checks
- Extended support of
java.text.NumberFormatfor Number types to String mapping
- OSGi support
- New built-in conversions around date/time type
This list is by no means exhaustive. Check out the individual announcements for the Beta1, Beta2, CR1 and CR2 releases for all the details. Also be sure to take a look at the migration notes to learn more about some issues to consider when migrating from MapStruct 1.0 to 1.1.
MapStruct would be nowhere without its steadily growing community of users and contributors. So let me say a big thank you to everyone involved, be it through reporting bugs, starting discussions on the mailing list and of course helping out with contributions on the code base itself.
The following people have sent in code changes for MapStruct 1.1: Vincent Alexander Beelte, Oliver Ehrenmüller, Dominik Gruntz, Filip Hrisafov, Sean Huang, Markus Heberling, Maxim Kolesnikov, Peter Larson, Ciaran Liedeman, Pavel Makhov, Stefan May, Samuel Wright as well as MapStruct old-timers and dear fellows Andreas Gudian and Sjaak Derksen. Kudos to you, your efforts and hard work are highly appreciated!
Also let me use the opportunity and introduce Filip Hrisafov to you, the latest committer to the project. He has been very busy with hacking on MapStruct lately, first by adding some more built-in conversions around date and time types, and now working on the long-awaited support for field based mappings. Welcome aboard, Filip!
Speaking of numbers and stats, not only the number of contributors grew, also adoption numbers steadily increased over the course of the last year. We see more and more discussions in our Google group and increasing numbers of MapStruct-related questions on Stack Overflow as well as star gazers on GitHub.
Most impressive though are the download numbers we get from the Maven Central repo. As an example here are the numbers for the org.mapstruct:mapstruct artifact:
The downloads grew by factor 5 from about 10,000 in November 2015 to about 50,000 in the last month. It’s just great to see that MapStruct is that useful for so many users out there!
Finally let’s take a look at what to expect from MapStruct in the next time. As already discussed in the CR 2 announcement, we’d like to get out MapStruct 1.2 much quicker than 1.1, so you can expect it in much less than one year from now :)
Two features planned for 1.2 are the aforementioned field based mappings and support for immutable beans on the target side by leveraging non-default constructors. Also take a look at the backlog. If there is anything in there you’d like to see addressed rather sooner than later, let us know by commenting or voting.
Our general idea is to keep the number of new features per release a bit lower and in turn do more frequent releases, living up to the “Release early, release often” principle.
Use these GAV coordinates with Maven, Gradle or similar dependency management tools:
- org.mapstruct:mapstruct:1.1.0.Final for the annotation JAR (to be used with Java <= 7) or org.mapstruct:mapstruct-jdk8:1.1.0.Final (for usage with Java >= 8)
- org.mapstruct:mapstruct-processor:1.1.0.Final for the annotation processor.