Skip to content

Commit aebae31

Browse files
committed
HHH-18644 - New and improved hibernate-maven-plugin
- Complete generation of 'pom.xml' in 'tooling/hibernate-maven-plugin/hibernate-maven-plugin.gradle' to include the invoking of the integration tests - Cleanup of class 'MavenPluginDescriptorTask' - Cleanup of class 'MavenInvokerRunTask' - Add possibility to specify path to the pom file in 'MavenInstallArtifactTask' - Change the working directory to 'maven-embedder/working-directory' in 'MavenEmbedderPlugin - Create a task to copy the pom.xml file (generated by task 'generatePomFileForHibernateCorePublication' to the root of the working directory - Create a task to copy the sources to the working directory - Create a task to install 'hibernate-scan-jandex' into the local repository - Create a task to install the hibernate-maven-plugin into the local repository prior to the integration tests - Wire all the tasks together Signed-off-by: Koen Aers <[email protected]>
1 parent 60b7763 commit aebae31

File tree

5 files changed

+98
-69
lines changed

5 files changed

+98
-69
lines changed

local-build-plugins/src/main/java/org/hibernate/build/maven/embedder/MavenEmbedderPlugin.java

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import org.gradle.api.Plugin;
44
import org.gradle.api.Project;
55
import org.gradle.api.file.Directory;
6+
import org.gradle.api.file.RegularFile;
67
import org.gradle.api.provider.Provider;
78
import org.gradle.api.services.BuildServiceRegistry;
9+
import org.gradle.api.tasks.Copy;
810
import org.gradle.api.tasks.SourceSet;
911
import org.gradle.api.tasks.SourceSetContainer;
1012
import org.gradle.api.tasks.TaskProvider;
@@ -31,25 +33,58 @@ public void apply(Project project) {
3133
MavenEmbedderConfig.class
3234
);
3335

36+
final Provider<Directory> workingDirectory = project.getLayout().getBuildDirectory().dir("maven-embedder/working-directory");
37+
3438
// add the MavenEmbedderService shared-build-service
3539
final Provider<MavenEmbedderService> embedderServiceProvider = sharedServices.registerIfAbsent(
3640
"maven-embedder",
3741
MavenEmbedderService.class, (spec) -> {
3842
spec.getParameters().getProjectVersion().set( project.getVersion().toString() );
39-
spec.getParameters().getWorkingDirectory().set( project.getLayout().getProjectDirectory() );
43+
spec.getParameters().getWorkingDirectory().set( workingDirectory );
4044
spec.getParameters().getMavenLocalDirectory().set( dsl.getLocalRepositoryDirectory() );
4145
}
4246
);
4347

48+
final Provider<RegularFile> mavenPluginPom = project.getLayout().getBuildDirectory().file( "publications/hibernateMavenPlugin/pom-default.xml" );
49+
50+
final TaskProvider<Copy> copyPomTask = project.getTasks().register( "copyPluginPom", Copy.class, (task) -> {
51+
task.setGroup( "maven embedder" );
52+
task.usesService( embedderServiceProvider );
53+
task.from( mavenPluginPom.get().getAsFile() );
54+
task.setDestinationDir( workingDirectory.get().getAsFile());
55+
task.rename( "pom-default.xml", "pom.xml" );
56+
task.dependsOn( "generatePomFileForHibernateMavenPluginPublication" );
57+
} );
58+
4459
final Project coreProject = project.getRootProject().project( "hibernate-core" );
4560
final Provider<Directory> hibernateCoreLibsFolder = coreProject.getLayout().getBuildDirectory().dir("libs");
46-
61+
final Provider<RegularFile> hibernateCorePom = project.getLayout().getBuildDirectory().file( "publications/hibernateCore/pom-default.xml" );
4762
final TaskProvider<MavenInstallArtifactTask> installHibernateCoreTask = project.getTasks().register( "installHibernateCore", MavenInstallArtifactTask.class, (task) -> {
4863
task.setGroup( "maven embedder" );
4964
task.getMavenEmbedderService().set( embedderServiceProvider );
5065
task.usesService( embedderServiceProvider );
5166
task.artifactId = "hibernate-core";
5267
task.getArtifactFolder().set( hibernateCoreLibsFolder );
68+
task.pomFilePath = hibernateCorePom.get().getAsFile().getAbsolutePath();
69+
task.dependsOn("generatePomFileForHibernateCorePublication");
70+
} );
71+
72+
final Project scanJandexProject = project.getRootProject().project( "hibernate-scan-jandex" );
73+
final Provider<Directory> hibernateScanJandexLibsFolder = scanJandexProject.getLayout().getBuildDirectory().dir("libs");
74+
final TaskProvider<MavenInstallArtifactTask> installHibernateScanJandexTask = project.getTasks().register( "installHibernateScanJandex", MavenInstallArtifactTask.class, (task) -> {
75+
task.setGroup( "maven embedder" );
76+
task.getMavenEmbedderService().set( embedderServiceProvider );
77+
task.usesService( embedderServiceProvider );
78+
task.artifactId = "hibernate-scan-jandex";
79+
task.getArtifactFolder().set( hibernateScanJandexLibsFolder );
80+
} );
81+
82+
final TaskProvider<Copy> copySourcesTask = project.getTasks().register( "copySources", Copy.class, (task) -> {
83+
task.setGroup( "maven embedder" );
84+
task.usesService( embedderServiceProvider );
85+
task.from( new File(project.getProjectDir(), "src").toPath() );
86+
task.setDestinationDir( new File(workingDirectory.get().getAsFile(), "src"));
87+
task.dependsOn( copyPomTask );
5388
} );
5489

5590
// Via the plugin's POM, we tell Maven to generate the descriptors into
@@ -78,20 +113,32 @@ public void apply(Project project) {
78113

79114
// the hibernate-core jar needs to be present in the local repository
80115
// we need compilation to happen before we generate the descriptors
81-
task.dependsOn("installHibernateCore", "compileJava" );
116+
task.dependsOn( "compileJava", copySourcesTask);
82117

83118
} );
84119

120+
final TaskProvider<MavenInstallArtifactTask> installHibernateMavenPluginTask = project.getTasks().register( "installHibernateMavenPlugin", MavenInstallArtifactTask.class, (task) -> {
121+
task.setGroup( "maven embedder" );
122+
task.getMavenEmbedderService().set( embedderServiceProvider );
123+
task.usesService( embedderServiceProvider );
124+
task.artifactId = "hibernate-maven-plugin";
125+
task.getArtifactFolder().set( project.getLayout().getBuildDirectory().dir("libs" ));
126+
task.pomFilePath = mavenPluginPom.get().getAsFile().getAbsolutePath();
127+
task.dependsOn("jar", generatePluginDescriptorTask);
128+
} );
129+
85130
final TaskProvider<MavenInvokerRunTask> integrationTestTask = project.getTasks().register( "integrationTest", MavenInvokerRunTask.class, (task) -> {
86131
task.setGroup( "maven embedder" );
87132

88133
task.getMavenEmbedderService().set( embedderServiceProvider );
89134
task.usesService( embedderServiceProvider );
90135

91-
task.dependsOn("jar");
136+
task.dependsOn("installHibernateMavenPlugin");
92137

93138
} );
94139

140+
// compilation can only happen when hibernate core is available in the local repo
141+
project.getTasks().named("compileJava", (compileTask -> compileTask.dependsOn( installHibernateCoreTask, installHibernateScanJandexTask )));
95142
// we need the descriptor generation to happen before we jar
96143
project.getTasks().named( "jar", (jarTask) -> jarTask.dependsOn( generatePluginDescriptorTask ) );
97144
project.getTasks().named( "check" , (checkTask) -> checkTask.dependsOn( integrationTestTask ) );

local-build-plugins/src/main/java/org/hibernate/build/maven/embedder/MavenInstallArtifactTask.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package org.hibernate.build.maven.embedder;
22

33
import org.gradle.api.DefaultTask;
4-
import org.gradle.api.Project;
54
import org.gradle.api.file.DirectoryProperty;
65
import org.gradle.api.provider.Property;
76
import org.gradle.api.services.ServiceReference;
8-
import org.gradle.api.tasks.Input;
97
import org.gradle.api.tasks.InputDirectory;
10-
import org.gradle.api.tasks.InputFile;
118
import org.gradle.api.tasks.TaskAction;
129

1310
import java.io.File;
@@ -19,6 +16,7 @@ public abstract class MavenInstallArtifactTask extends DefaultTask {
1916
abstract Property<MavenEmbedderService> getMavenEmbedderService();
2017

2118
String artifactId;
19+
String pomFilePath;
2220

2321
@InputDirectory
2422
abstract DirectoryProperty getArtifactFolder();
@@ -37,6 +35,9 @@ private String[] constructTaskAndArgs() {
3735
taskAndArgs.add("-DlocalRepositoryPath=" + getPathToLocalRepository());
3836
taskAndArgs.add("-Dfile=" + getPathToArtifact());
3937
taskAndArgs.add("-DartifactId=" + artifactId);
38+
if (pomFilePath != null) {
39+
taskAndArgs.add( "-DpomFile=" + pomFilePath );
40+
}
4041
return taskAndArgs.toArray(new String[0]);
4142
}
4243

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,18 @@
11
package org.hibernate.build.maven.embedder;
22

33
import org.gradle.api.DefaultTask;
4-
import org.gradle.api.file.Directory;
54
import org.gradle.api.provider.Property;
65
import org.gradle.api.services.ServiceReference;
76
import org.gradle.api.tasks.TaskAction;
87

9-
import java.io.File;
10-
import java.io.IOException;
11-
import java.nio.file.Files;
12-
import java.nio.file.Path;
13-
import java.util.ArrayList;
14-
158
public abstract class MavenInvokerRunTask extends DefaultTask {
169

1710
@ServiceReference
1811
abstract Property<MavenEmbedderService> getMavenEmbedderService();
1912

2013
@TaskAction
2114
public void runInvoker() {
22-
// install the plugin artefact
23-
getMavenEmbedderService().get().execute( constructTaskAndArgs() );
24-
// getMavenEmbedderService().get().execute( "invoker:run");
25-
getMavenEmbedderService().get().execute( "integration-test" );
26-
}
27-
28-
private String[] constructTaskAndArgs() {
29-
ArrayList<String> taskAndArgs = new ArrayList<String>();
30-
taskAndArgs.add("install:install-file");
31-
taskAndArgs.add("-Dpackaging=jar");
32-
taskAndArgs.add("-DartifactId=" + getProject().getName());
33-
taskAndArgs.add("-DlocalRepositoryPath=" + getPathToLocalRepository());
34-
taskAndArgs.add("-Dfile=" + getPathToArtifact());
35-
taskAndArgs.add("-DpomFile=" + getPathToPomFile());
36-
return taskAndArgs.toArray(new String[0]);
37-
}
38-
39-
private String getPathToArtifact() {
40-
Directory buildDir = getProject().getLayout().getBuildDirectory().get();
41-
return buildDir
42-
.dir( "libs" )
43-
.file( getArtifactName())
44-
.getAsFile()
45-
.getAbsolutePath();
46-
}
47-
48-
private String getArtifactName() {
49-
return getProject().getName() + "-" + getProject().getVersion() + ".jar";
50-
}
51-
52-
private String getPathToPomFile() {
53-
return new File(getProject().getProjectDir(), "pom.xml").getAbsolutePath();
15+
getMavenEmbedderService().get().execute( "invoker:run");
5416
}
5517

56-
private String getPathToLocalRepository() {
57-
return getMavenEmbedderService()
58-
.get()
59-
.getParameters()
60-
.getMavenLocalDirectory()
61-
.getAsFile()
62-
.get()
63-
.getAbsolutePath();
64-
}
65-
66-
6718
}

local-build-plugins/src/main/java/org/hibernate/build/maven/embedder/MavenPluginDescriptorTask.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,12 @@ public MavenPluginDescriptorTask() {
2828

2929
@TaskAction
3030
public void generateDescriptor() {
31+
performDescriptorGeneration();
32+
}
33+
34+
private void performDescriptorGeneration() {
35+
getMavenEmbedderService().get().execute( "compile" );
3136
getMavenEmbedderService().get().execute( "plugin:descriptor" );
32-
// todo : anything else? e.g.
33-
//getMavenEmbedderService().get().execute( "plugin:addPluginArtifactMetadata" );
34-
//getMavenEmbedderService().get().execute( "plugin:helpmojo" );
3537
}
38+
3639
}

tooling/hibernate-maven-plugin/hibernate-maven-plugin.gradle

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,28 @@ publishing {
2929
.plus {
3030
packaging('maven-plugin')
3131
}
32+
asNode()
33+
.dependencies
34+
.dependency
35+
.findAll { dependency ->
36+
dependency.groupId.text().startsWith('org.apache.maven')
37+
}
38+
.each { dependency ->
39+
if (dependency.groupId.text().startsWith('org.apache.maven.shared')) {
40+
dependency.scope*.value = 'compile'
41+
} else {
42+
dependency.scope*.value = 'provided'
43+
}
44+
}
45+
asNode()
46+
.dependencies
47+
.dependency
48+
.findAll { dependency ->
49+
dependency.groupId.text().startsWith('org.hibernate.orm')
50+
}
51+
.each { dependency ->
52+
dependency.scope*.value = 'compile'
53+
}
3254
asNode()
3355
.dependencies
3456
.plus {
@@ -37,24 +59,29 @@ publishing {
3759
pluginPlugin.appendNode('groupId', 'org.apache.maven.plugins')
3860
pluginPlugin.appendNode('artifactId', 'maven-plugin-plugin')
3961
pluginPlugin.appendNode('version', '3.15.0')
40-
def configuration = pluginPlugin.appendNode('configuration')
41-
configuration.appendNode('goalPrefix', 'plugin')
42-
configuration.appendNode('outputDirectory', 'target/generated/sources/plugin-descriptors/META-INF/maven' )
62+
def pluginConfiguration = pluginPlugin.appendNode('configuration')
63+
pluginConfiguration.appendNode('goalPrefix', 'plugin')
64+
pluginConfiguration.appendNode('outputDirectory', layout.buildDirectory.dir('generated/sources/plugin-descriptors/META-INF/maven').get().getAsFile().getAbsolutePath() )
65+
def invokerPlugin = plugins.appendNode('plugin');
66+
invokerPlugin.appendNode('groupId', 'org.apache.maven.plugins')
67+
invokerPlugin.appendNode('artifactId', 'maven-invoker-plugin')
68+
invokerPlugin.appendNode('version', '3.8.0')
69+
def invokerConfiguration = invokerPlugin.appendNode('configuration');
70+
invokerConfiguration.appendNode('debug', 'true');
71+
invokerConfiguration.appendNode('mavenExecutable', 'mvnw');
72+
def scriptVariables = invokerConfiguration.appendNode('scriptVariables');
73+
scriptVariables.appendNode('hibernateCoreJarPath', layout.buildDirectory.file('maven-embedder/maven-local/org/hibernate/orm/hibernate-core/' + project.version + '/hibernate-core-' + project.version + '.jar').get().getAsFile().getAbsolutePath())
4374
}
4475
}
4576
}
4677
hibernateCore(MavenPublication) {
47-
artifactId 'org.hibernate.orm'
78+
artifactId 'hibernate-core'
4879
from project(":hibernate-core").components.java
4980
}
5081
}
5182
repositories {
5283
mavenLocal {
53-
url = layout.buildDirectory.dir('maven-embedder/maven-local')
84+
url = file(layout.buildDirectory.dir('maven-embedder/maven-local'))
5485
}
5586
}
5687
}
57-
58-
tasks.generatePluginDescriptor.dependsOn generatePomFileForHibernateMavenPluginPublication
59-
tasks.integrationTest.dependsOn publishHibernateCorePublicationToMavenLocalRepository
60-

0 commit comments

Comments
 (0)