99import org .gradle .api .tasks .SourceSetContainer ;
1010import org .gradle .api .tasks .TaskProvider ;
1111
12+ import java .io .File ;
13+ import java .util .ArrayList ;
14+ import java .util .List ;
15+
1216/**
1317 * Plugin for integrating Maven Embedder into the Gradle build to execute
1418 * some Maven tasks/goals/mojos.
@@ -29,23 +33,43 @@ public void apply(Project project) {
2933 MavenEmbedderConfig .class
3034 );
3135
36+ final Provider <Directory > workingDirectory = project .getLayout ().getBuildDirectory ().dir ("maven-embedder/workspace" );
37+
3238 // add the MavenEmbedderService shared-build-service
3339 final Provider <MavenEmbedderService > embedderServiceProvider = sharedServices .registerIfAbsent (
3440 "maven-embedder" ,
3541 MavenEmbedderService .class , (spec ) -> {
3642 spec .getParameters ().getProjectVersion ().set ( project .getVersion ().toString () );
37- spec .getParameters ().getWorkingDirectory ().set ( project . getLayout (). getProjectDirectory () );
43+ spec .getParameters ().getWorkingDirectory ().set ( workingDirectory );
3844 spec .getParameters ().getMavenLocalDirectory ().set ( dsl .getLocalRepositoryDirectory () );
3945 }
4046 );
4147
48+ project .getTasks ().register (
49+ "installHibernateCore" ,
50+ RunMavenTask .class ,
51+ (task ) -> {
52+ configureInstallHibernateCoreTask (
53+ configureInstallTask ( configureRunMavenTask ( task , embedderServiceProvider ) ) );
54+ });
55+
56+ project .getTasks ().register (
57+ "installHibernateScanJandex" ,
58+ RunMavenTask .class ,
59+ (task ) -> {
60+ configureInstallHibernateScanJandexTask (
61+ configureInstallTask ( configureRunMavenTask ( task , embedderServiceProvider ) ));
62+ } );
63+
4264 // Via the plugin's POM, we tell Maven to generate the descriptors into
4365 // `target/generated/sources/plugin-descriptors/META-INF/maven`.
4466 // `META-INF/maven` is the relative path we need inside the jar, so we
4567 // configure the "resource directory" in Gradle to be just the
4668 // `target/generated/sources/plugin-descriptors` part.
4769 final Provider <Directory > descriptorsDir = project .getLayout ().getBuildDirectory ().dir ( "generated/sources/plugin-descriptors" );
4870
71+
72+
4973 // create the "mirror" task which calls the appropriate Maven tasks/goals/mojos behind the scenes using the embedder service
5074 final TaskProvider <MavenPluginDescriptorTask > generatePluginDescriptorTask = project .getTasks ().register ( "generatePluginDescriptor" , MavenPluginDescriptorTask .class , (task ) -> {
5175 task .setGroup ( "maven embedder" );
@@ -61,11 +85,160 @@ public void apply(Project project) {
6185 final SourceSet mainSourceSet = sourceSets .getByName ( "main" );
6286 mainSourceSet .getResources ().srcDir ( task .getDescriptorDirectory () );
6387
88+ // the hibernate-core jar needs to be present in the local repository
6489 // we need compilation to happen before we generate the descriptors
65- task .dependsOn ( "compileJava" );
90+ task .dependsOn ( "prepareWorkspace" , "installHibernateCore" , "installHibernateScanJandex" );
6691 } );
6792
93+ project .getTasks ().register (
94+ "createMavenWrapper" ,
95+ RunMavenTask .class ,
96+ (task ) -> {
97+ configuraCreateMavenWrapperTask (
98+ configureRunMavenTask ( task , embedderServiceProvider ));
99+ } );
100+
101+ project .getTasks ().register (
102+ "installHibernateMavenPlugin" ,
103+ RunMavenTask .class ,
104+ (task ) -> {
105+ configureInstallHibernateMavenPluginTask (
106+ configureInstallTask (
107+ configureRunMavenTask ( task , embedderServiceProvider )));
108+ } );
109+
110+ project .getTasks ().register (
111+ "integrationTest" ,
112+ RunMavenTask .class ,
113+ (task ) -> {
114+ configureIntegrationTestTask (
115+ configureRunMavenTask ( task , embedderServiceProvider ));
116+ } );
117+
68118 // we need the descriptor generation to happen before we jar
69119 project .getTasks ().named ( "jar" , (jarTask ) -> jarTask .dependsOn ( generatePluginDescriptorTask ) );
120+ project .getTasks ().named ( "check" , (checkTask ) -> checkTask .dependsOn ( "integrationTest" , generatePluginDescriptorTask ) );
121+ }
122+
123+ private void configureInstallHibernateMavenPluginTask (RunMavenTask task ) {
124+ List <String > arguments = new ArrayList <String >(task .getArguments ().get ());
125+ arguments .add ("-Dfile=" + getHibernateMavenPluginArtifactFilePath ( task .getProject () ));
126+ arguments .add ("-DartifactId=hibernate-maven-plugin" );
127+ arguments .add ( "-DpomFile=" + getHibernateMavenPluginPomFilePath ( task .getProject () ) );
128+ task .getArguments ().set ( arguments );
129+ task .dependsOn ("jar" , "generatePluginDescriptor" );
130+ }
131+
132+ private void configureInstallHibernateCoreTask (RunMavenTask task ) {
133+ List <String > arguments = new ArrayList <String >(task .getArguments ().get ());
134+ arguments .add ("-Dfile=" + getHibernateCoreArtifactFilePath ( task .getProject () ));
135+ arguments .add ("-DartifactId=hibernate-core" );
136+ arguments .add ( "-DpomFile=" + getHibernateCorePomFilePath ( task .getProject () ) );
137+ task .getArguments ().set ( arguments );
138+ task .dependsOn (":hibernate-core:generatePomFileForPublishedArtifactsPublication" , ":hibernate-core:jar" );
139+ }
140+
141+ private void configureInstallHibernateScanJandexTask (RunMavenTask task ) {
142+ List <String > arguments = new ArrayList <String >(task .getArguments ().get ());
143+ arguments .add ("-Dfile=" + getHibernateScanJandexArtifactFilePath ( task .getProject () ));
144+ arguments .add ("-DartifactId=hibernate-scan-jandex" );
145+ task .getArguments ().set ( arguments );
146+ task .dependsOn (":hibernate-scan-jandex:jar" );
147+ }
148+
149+ private void configureIntegrationTestTask (RunMavenTask task ) {
150+ task .getGoals ().set ( "invoker:run" );
151+ task .dependsOn ("createMavenWrapper" , "installHibernateMavenPlugin" );
152+ }
153+
154+ private void configuraCreateMavenWrapperTask (RunMavenTask task ) {
155+ task .getGoals ().set ("wrapper:wrapper" );
156+ task .getArguments ().set ( List .of ("-f" + getIntegrationTestFolderPath ( task .getProject () ) ));
157+ task .dependsOn ( "prepareWorkspace" );
158+ }
159+
160+ private String getHibernateMavenPluginPomFilePath (Project project ) {
161+ return project
162+ .getLayout ()
163+ .getBuildDirectory ()
164+ .file ( "publications/publishedArtifacts/pom-default.xml" )
165+ .get ()
166+ .getAsFile ()
167+ .getAbsolutePath ();
70168 }
169+
170+ private String getHibernateMavenPluginArtifactFilePath (Project project ) {
171+ final String artifactName = "hibernate-maven-plugin-" + project .getVersion () + ".jar" ;
172+ final File libsFolder = project .getLayout ().getBuildDirectory ().dir ("libs" ).get ().getAsFile ();
173+ return new File (libsFolder , artifactName ).getAbsolutePath ();
174+ }
175+
176+ private RunMavenTask configureRunMavenTask (
177+ RunMavenTask task ,
178+ Provider <MavenEmbedderService > embedderServiceProvider ) {
179+ task .setGroup ( "maven embedder" );
180+ task .getMavenEmbedderService ().set ( embedderServiceProvider );
181+ task .usesService ( embedderServiceProvider );
182+ return task ;
183+ }
184+
185+ private Directory getWorkingDirectory (Project project ) {
186+ return project .getLayout ().getBuildDirectory ().dir ("maven-embedder/workspace" ).get ();
187+ }
188+
189+ private String getIntegrationTestFolderPath (Project project ) {
190+ return getWorkingDirectory ( project ).dir ( "src/it/enhance" ).getAsFile ().getAbsolutePath ();
191+ }
192+
193+ private RunMavenTask configureInstallTask (RunMavenTask task ) {
194+ task .getGoals ().set ( "install:install-file" );
195+ ArrayList <String > arguments = new ArrayList <String >();
196+ arguments .add ("-DgroupId=" + task .getProject ().getGroup ().toString ());
197+ arguments .add ("-Dversion=" + task .getProject ().getVersion ());
198+ arguments .add ("-Dpackaging=jar" );
199+ task .getArguments ().set ( arguments );
200+ return task ;
201+ }
202+
203+ private String getHibernateCoreArtifactFilePath (Project project ) {
204+ final String artifactName = "hibernate-core-" + project .getVersion () + ".jar" ;
205+ final File hibernateCoreLibsFolder = getHibernateCoreBuildDirectory ( project )
206+ .dir ( "libs" )
207+ .getAsFile ();
208+ return new File (hibernateCoreLibsFolder , artifactName ).getAbsolutePath ();
209+ }
210+
211+ private String getHibernateCorePomFilePath (Project project ) {
212+ return getHibernateCoreBuildDirectory ( project )
213+ .file ( "publications/publishedArtifacts/pom-default.xml" )
214+ .getAsFile ()
215+ .getAbsolutePath ();
216+ }
217+
218+ private String getHibernateScanJandexArtifactFilePath (Project project ) {
219+ final String artifactName = "hibernate-scan-jandex-" + project .getVersion () + ".jar" ;
220+ final File hibernateScanJandexLibsFolder = getHibernateScanJandexBuildDirectory ( project )
221+ .dir ( "libs" )
222+ .getAsFile ();
223+ return new File (hibernateScanJandexLibsFolder , artifactName ).getAbsolutePath ();
224+ }
225+
226+ private Directory getHibernateCoreBuildDirectory (Project project ) {
227+ return project
228+ .getRootProject ()
229+ .project ( "hibernate-core" )
230+ .getLayout ()
231+ .getBuildDirectory ()
232+ .get ();
233+ }
234+
235+ private Directory getHibernateScanJandexBuildDirectory (Project project ) {
236+ return project
237+ .getRootProject ()
238+ .project ( "hibernate-scan-jandex" )
239+ .getLayout ()
240+ .getBuildDirectory ()
241+ .get ();
242+ }
243+
71244}
0 commit comments