Skip to content

Commit d0e7a56

Browse files
committed
Use org.hibernate.orm:hibernate-maven-plugin with Spring Boot 4
This commit also removes the deprecated configuration options for the hibernate-maven-plugin. Closes gh-1990
1 parent e79c132 commit d0e7a56

File tree

3 files changed

+73
-19
lines changed

3 files changed

+73
-19
lines changed

start-site/src/main/java/io/spring/start/site/extension/dependency/graalvm/GraalVmProjectGenerationConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ static class HibernateConfiguration {
9393
@Bean
9494
@ConditionalOnBuildSystem(MavenBuildSystem.ID)
9595
HibernatePluginMavenBuildCustomizer hibernatePluginMavenBuildCustomizer() {
96-
return new HibernatePluginMavenBuildCustomizer();
96+
return new HibernatePluginMavenBuildCustomizer(this.platformVersion);
9797
}
9898

9999
@Bean

start-site/src/main/java/io/spring/start/site/extension/dependency/graalvm/HibernatePluginMavenBuildCustomizer.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,47 @@
1818

1919
import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
2020
import io.spring.initializr.generator.spring.build.BuildCustomizer;
21+
import io.spring.initializr.generator.version.Version;
22+
import io.spring.initializr.generator.version.VersionParser;
23+
import io.spring.initializr.generator.version.VersionRange;
2124

2225
/**
2326
* A {@link BuildCustomizer} for Maven projects using GraalVm and Hibernate.
2427
*
2528
* @author Stephane Nicoll
29+
* @author Moritz Halbritter
2630
*/
31+
// See https://docs.hibernate.org/orm/7.1/userguide/html_single/#BytecodeEnhancement
2732
class HibernatePluginMavenBuildCustomizer implements BuildCustomizer<MavenBuild> {
2833

34+
private static final VersionRange SPRING_BOOT_4_0_OR_LATER = VersionParser.DEFAULT.parseRange("4.0.0-M1");
35+
36+
private final Version bootVersion;
37+
38+
HibernatePluginMavenBuildCustomizer(Version bootVersion) {
39+
this.bootVersion = bootVersion;
40+
}
41+
2942
@Override
3043
public void customize(MavenBuild build) {
31-
build.plugins()
32-
.add("org.hibernate.orm.tooling", "hibernate-enhance-maven-plugin",
33-
(plugin) -> plugin.version("${hibernate.version}")
34-
.execution("enhance", (execution) -> execution.goal("enhance")
35-
.configuration((configuration) -> configuration.add("enableLazyInitialization", "true")
36-
.add("enableDirtyTracking", "true")
37-
.add("enableAssociationManagement", "true"))));
44+
if (isSpringBoot4OrLater()) {
45+
build.plugins()
46+
.add("org.hibernate.orm", "hibernate-maven-plugin", (plugin) -> plugin.version("${hibernate.version}")
47+
.execution("enhance", (execution) -> execution.goal("enhance")));
48+
}
49+
else {
50+
build.plugins()
51+
.add("org.hibernate.orm.tooling", "hibernate-enhance-maven-plugin",
52+
(plugin) -> plugin.version("${hibernate.version}")
53+
.execution("enhance", (execution) -> execution.goal("enhance")
54+
.configuration((configuration) -> configuration.add("enableLazyInitialization", "true")
55+
.add("enableDirtyTracking", "true")
56+
.add("enableAssociationManagement", "true"))));
57+
}
58+
}
59+
60+
private boolean isSpringBoot4OrLater() {
61+
return SPRING_BOOT_4_0_OR_LATER.match(this.bootVersion);
3862
}
3963

4064
}

start-site/src/test/java/io/spring/start/site/extension/dependency/graalvm/GraalVmProjectGenerationConfigurationTests.java

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,12 @@
3232
* Tests for {@link GraalVmProjectGenerationConfiguration}.
3333
*
3434
* @author Stephane Nicoll
35+
* @author Moritz Halbritter
3536
*/
3637
class GraalVmProjectGenerationConfigurationTests extends AbstractExtensionTests {
3738

39+
private static final SupportedBootVersion BOOT_VERSION = SupportedBootVersion.latest();
40+
3841
@Test
3942
void gradleBuildWithoutNativeDoesNotConfigureNativeBuildTools() {
4043
ProjectRequest request = createProjectRequest("web");
@@ -48,8 +51,8 @@ void mavenBuildWithoutNativeDoesNotConfigureNativeBuildTools() {
4851
}
4952

5053
@Test
51-
void mavenBuildConfigureNativeBuildtoolsPlugint() {
52-
ProjectRequest request = createNativeProjectRequest();
54+
void mavenBuildConfigureNativeBuildtoolsPlugin() {
55+
ProjectRequest request = createNativeProjectRequest(BOOT_VERSION);
5356
assertThat(mavenPom(request)).lines().containsSequence(
5457
// @formatter:off
5558
" <plugin>",
@@ -63,18 +66,18 @@ void mavenBuildConfigureNativeBuildtoolsPlugint() {
6366
void gradleBuildConfigureNativeBuildToolsPlugin(@Autowired MavenVersionResolver mavenVersionResolver) {
6467
String nbtVersion = NativeBuildtoolsVersionResolver.resolve(mavenVersionResolver,
6568
Version.parse(SupportedBootVersion.latest().getVersion()));
66-
ProjectRequest request = createNativeProjectRequest();
69+
ProjectRequest request = createNativeProjectRequest(BOOT_VERSION);
6770
assertThat(gradleBuild(request)).hasPlugin("org.graalvm.buildtools.native", nbtVersion);
6871
}
6972

7073
@Test
7174
void gradleBuildWithoutJpaDoesNotConfigureHibernateEnhancePlugin() {
72-
assertThat(gradleBuild(createNativeProjectRequest())).doesNotContain("org.hibernate.orm");
75+
assertThat(gradleBuild(createNativeProjectRequest(BOOT_VERSION))).doesNotContain("org.hibernate.orm");
7376
}
7477

7578
@Test
7679
void gradleBuildAndGroovyDslWithJpaConfiguresHibernateEnhancePlugin() {
77-
ProjectRequest request = createNativeProjectRequest("data-jpa");
80+
ProjectRequest request = createNativeProjectRequest(BOOT_VERSION, "data-jpa");
7881
assertThat(gradleBuild(request)).hasPlugin("org.hibernate.orm").lines().containsSequence(
7982
// @formatter:off
8083
"hibernate {",
@@ -87,7 +90,7 @@ void gradleBuildAndGroovyDslWithJpaConfiguresHibernateEnhancePlugin() {
8790

8891
@Test
8992
void gradleBuildAndKotlinDslWithJpaConfiguresHibernateEnhancePlugin() {
90-
ProjectRequest request = createNativeProjectRequest("data-jpa");
93+
ProjectRequest request = createNativeProjectRequest(BOOT_VERSION, "data-jpa");
9194
assertThat(gradleKotlinDslBuild(request)).hasPlugin("org.hibernate.orm").lines().containsSequence(
9295
// @formatter:off
9396
"hibernate {",
@@ -100,13 +103,40 @@ void gradleBuildAndKotlinDslWithJpaConfiguresHibernateEnhancePlugin() {
100103

101104
@Test
102105
void mavenBuildWithoutJpaDoesNotConfigureHibernateEnhancePlugin() {
103-
assertThat(mavenPom(createNativeProjectRequest())).doesNotContain("hibernate-enhance-maven-plugin");
106+
assertThat(mavenPom(createNativeProjectRequest(BOOT_VERSION))).doesNotContain("hibernate-maven-plugin");
107+
}
108+
109+
@Test
110+
void mavenBuildWithoutJpaDoesNotConfigureHibernateEnhancePluginForBoot35() {
111+
assertThat(mavenPom(createNativeProjectRequest(SupportedBootVersion.V3_5)))
112+
.doesNotContain("hibernate-enhance-maven-plugin");
104113
}
105114

106115
@Test
107116
void mavenBuildWithJpaConfigureHibernateEnhancePlugin() {
108-
assertThat(mavenPom(createNativeProjectRequest("data-jpa"))).lines().containsSequence(
117+
assertThat(mavenPom(createNativeProjectRequest(BOOT_VERSION, "data-jpa"))).lines().containsSequence(
109118
// @formatter:off
119+
" <plugin>",
120+
" <groupId>org.hibernate.orm</groupId>",
121+
" <artifactId>hibernate-maven-plugin</artifactId>",
122+
" <version>${hibernate.version}</version>",
123+
" <executions>",
124+
" <execution>",
125+
" <id>enhance</id>",
126+
" <goals>",
127+
" <goal>enhance</goal>",
128+
" </goals>",
129+
" </execution>",
130+
" </executions>",
131+
" </plugin>");
132+
// @formatter:on
133+
}
134+
135+
@Test
136+
void mavenBuildWithJpaConfigureHibernateEnhancePluginForBoot35() {
137+
assertThat(mavenPom(createNativeProjectRequest(SupportedBootVersion.V3_5, "data-jpa"))).lines()
138+
.containsSequence(
139+
// @formatter:off
110140
" <plugin>",
111141
" <groupId>org.hibernate.orm.tooling</groupId>",
112142
" <artifactId>hibernate-enhance-maven-plugin</artifactId>",
@@ -130,13 +160,13 @@ void mavenBuildWithJpaConfigureHibernateEnhancePlugin() {
130160

131161
@Test
132162
void groovyProjectDoesNotConfigureGraalVm() {
133-
ProjectRequest request = createNativeProjectRequest("data-jpa");
163+
ProjectRequest request = createNativeProjectRequest(BOOT_VERSION, "data-jpa");
134164
request.setLanguage(GroovyLanguage.ID);
135165
assertThat(gradleBuild(request)).doesNotContain("graalvm").doesNotContain("org.hibernate.orm");
136166
}
137167

138-
private ProjectRequest createNativeProjectRequest(String... dependencies) {
139-
ProjectRequest projectRequest = createProjectRequest(dependencies);
168+
private ProjectRequest createNativeProjectRequest(SupportedBootVersion bootVersion, String... dependencies) {
169+
ProjectRequest projectRequest = createProjectRequest(bootVersion, dependencies);
140170
projectRequest.getDependencies().add(0, "native");
141171
return projectRequest;
142172
}

0 commit comments

Comments
 (0)