33import org .gradle .api .Plugin ;
44import org .gradle .api .Project ;
55import org .gradle .api .file .Directory ;
6+ import org .gradle .api .file .RegularFile ;
67import org .gradle .api .provider .Provider ;
78import org .gradle .api .services .BuildServiceRegistry ;
9+ import org .gradle .api .tasks .Copy ;
810import org .gradle .api .tasks .SourceSet ;
911import org .gradle .api .tasks .SourceSetContainer ;
1012import 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 ) );
0 commit comments