diff --git a/tooling/hibernate-enhance-maven-plugin/hibernate-enhance-maven-plugin.gradle b/tooling/hibernate-enhance-maven-plugin/hibernate-enhance-maven-plugin.gradle index d605dc0e2ef1..44e74ac0f2a7 100644 --- a/tooling/hibernate-enhance-maven-plugin/hibernate-enhance-maven-plugin.gradle +++ b/tooling/hibernate-enhance-maven-plugin/hibernate-enhance-maven-plugin.gradle @@ -16,6 +16,7 @@ repositories { } processResources { + include "**/lifecycle-mapping-metadata.xml" include "**/plugin-help.xml" into processResources.destinationDir filter(ReplaceTokens, tokens: ['version' : project.version]) @@ -30,6 +31,7 @@ dependencies { compile( libraries.jpa ) { transitive = false } compile( libraries.javassist ) { transitive = false } compile 'org.codehaus.plexus:plexus-utils:3.0.1' + compile 'org.sonatype.plexus:plexus-build-api:0.0.7' runtime( libraries.maven_core ) runtime( libraries.maven_artifact ) runtime( libraries.maven_plugin ) @@ -114,4 +116,4 @@ processResources.dependsOn processPluginXml mavenPom { name = 'Enhance Plugin of the Hibernate project for use with Maven build system.' description = 'Enhance Plugin of the Hibernate project for use with Maven build system.' -} \ No newline at end of file +} diff --git a/tooling/hibernate-enhance-maven-plugin/src/main/java/org/hibernate/orm/tooling/maven/MavenEnhancePlugin.java b/tooling/hibernate-enhance-maven-plugin/src/main/java/org/hibernate/orm/tooling/maven/MavenEnhancePlugin.java index 79b11e6afeee..ee32d8a924aa 100644 --- a/tooling/hibernate-enhance-maven-plugin/src/main/java/org/hibernate/orm/tooling/maven/MavenEnhancePlugin.java +++ b/tooling/hibernate-enhance-maven-plugin/src/main/java/org/hibernate/orm/tooling/maven/MavenEnhancePlugin.java @@ -10,9 +10,9 @@ import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; @@ -29,6 +29,7 @@ import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Execute; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; @@ -40,6 +41,8 @@ import org.hibernate.bytecode.enhance.spi.EnhancementContext; import org.hibernate.bytecode.enhance.spi.Enhancer; +import org.sonatype.plexus.build.incremental.BuildContext; + /** * This plugin will enhance Entity objects. * @@ -55,6 +58,9 @@ public class MavenEnhancePlugin extends AbstractMojo { */ private List sourceSet = new ArrayList(); + @Component + private BuildContext buildContext; + @Parameter(property = "dir", defaultValue = "${project.build.outputDirectory}") private String dir; @@ -143,16 +149,8 @@ public boolean doExtendedEnhancement(CtClass classDescriptor) { continue; } - if ( !enableLazyInitialization ) { - if ( !enhancementContext.isEntityClass( ctClass ) - && !enhancementContext.isCompositeClass( ctClass ) - && !enhancementContext.isMappedSuperclassClass( ctClass ) ) { - getLog().info( "Skipping class file [" + file.getAbsolutePath() + "], not an entity nor embeddable" ); - continue; - } - } - final byte[] enhancedBytecode = doEnhancement( ctClass, enhancer ); + byte[] enhancedBytecode = doEnhancement( file, ctClass, enhancer ); writeOutEnhancedClass( enhancedBytecode, ctClass, file ); getLog().info( "Successfully enhanced class [" + ctClass.getName() + "]" ); @@ -176,13 +174,8 @@ private ClassLoader toClassLoader(List runtimeClasspath) throws MojoExecut } // HHH-10145 Add dependencies to classpath as well - all but the ones used for testing purposes - Set artifacts = null; MavenProject project = ( (MavenProject) getPluginContext().get( "project" ) ); - if ( project != null ) { - // Prefer execution project when available (it includes transient dependencies) - MavenProject executionProject = project.getExecutionProject(); - artifacts = ( executionProject != null ? executionProject.getArtifacts() : project.getArtifacts() ); - } + Set artifacts = project.getArtifacts(); if ( artifacts != null) { for ( Artifact a : artifacts ) { if ( !Artifact.SCOPE_TEST.equals( a.getScope() ) ) { @@ -239,7 +232,7 @@ private CtClass toCtClass(File file, ClassPool classPool) throws MojoExecutionEx } } - private byte[] doEnhancement(CtClass ctClass, Enhancer enhancer) throws MojoExecutionException { + private byte[] doEnhancement(File javaClassFile, CtClass ctClass, Enhancer enhancer) throws MojoExecutionException { try { return enhancer.enhance( ctClass.getName(), ctClass.toBytecode() ); } @@ -248,7 +241,7 @@ private byte[] doEnhancement(CtClass ctClass, Enhancer enhancer) throws MojoExec if ( failOnError ) { throw new MojoExecutionException( msg, e ); } - getLog().warn( msg ); + buildContext.addMessage( javaClassFile, 0, 0, msg, BuildContext.SEVERITY_WARNING, e ); return null; } } @@ -290,45 +283,39 @@ private void writeOutEnhancedClass(byte[] enhancedBytecode, CtClass ctClass, Fil try { if ( file.delete() ) { if ( !file.createNewFile() ) { - getLog().error( "Unable to recreate class file [" + ctClass.getName() + "]" ); + buildContext.addMessage( file, 0, 0, "Unable to recreate class file", BuildContext.SEVERITY_ERROR, null ); } } else { - getLog().error( "Unable to delete class file [" + ctClass.getName() + "]" ); + buildContext.addMessage( file, 0, 0, "Unable to delete class file", BuildContext.SEVERITY_ERROR, null ); } } catch (IOException e) { - getLog().warn( "Problem preparing class file for writing out enhancements [" + ctClass.getName() + "]" ); + buildContext.addMessage( file, 0, 0, "Problem preparing class file for writing out enhancements", BuildContext.SEVERITY_WARNING, e ); } + OutputStream outputStream = null; try { - FileOutputStream outputStream = new FileOutputStream( file, false ); - try { - outputStream.write( enhancedBytecode ); - outputStream.flush(); - } - catch (IOException e) { - String msg = String.format( "Error writing to enhanced class [%s] to file [%s]", ctClass.getName(), file.getAbsolutePath() ); - if ( failOnError ) { - throw new MojoExecutionException( msg, e ); - } - getLog().warn( msg ); + outputStream = buildContext.newFileOutputStream( file ); + outputStream.write( enhancedBytecode ); + outputStream.flush(); + } + catch (IOException e) { + String msg = String.format( "Error writing to enhanced class [%s] to file [%s]", file.getName(), file.getAbsolutePath() ); + if ( failOnError ) { + throw new MojoExecutionException( msg, e ); } - finally { - try { + buildContext.addMessage( file, 0, 0, msg, BuildContext.SEVERITY_WARNING, e ); + } + finally { + try { + if( outputStream != null ) { outputStream.close(); ctClass.detach(); } - catch (IOException ignore) { - } } - } - catch (FileNotFoundException e) { - String msg = "Error opening class file for writing: " + file.getAbsolutePath(); - if ( failOnError ) { - throw new MojoExecutionException( msg, e ); + catch (IOException ignore) { } - getLog().warn( msg ); } } } diff --git a/tooling/hibernate-enhance-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml b/tooling/hibernate-enhance-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml new file mode 100644 index 000000000000..7ae74429fcff --- /dev/null +++ b/tooling/hibernate-enhance-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml @@ -0,0 +1,18 @@ + + + + + + enhance + + + + + true + false + + + + + + diff --git a/tooling/hibernate-enhance-maven-plugin/src/main/resources/META-INF/maven/plugin.xml b/tooling/hibernate-enhance-maven-plugin/src/main/resources/META-INF/maven/plugin.xml index 19d92ce67d12..730c326848a1 100644 --- a/tooling/hibernate-enhance-maven-plugin/src/main/resources/META-INF/maven/plugin.xml +++ b/tooling/hibernate-enhance-maven-plugin/src/main/resources/META-INF/maven/plugin.xml @@ -24,6 +24,7 @@ false false true + compile+runtime compile compile enhance @@ -84,6 +85,12 @@ false false + + + org.sonatype.plexus.build.incremental.BuildContext + buildContext + + @@ -96,6 +103,12 @@ jar 3.0.1 + + org.codehaus.plexus + plexus-build-api + jar + 0.0.7 + org.apache.maven.plugin-tools maven-plugin-annotations