From 71d278b77d691861162b9a1e51bc1edc1f00518b Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Tue, 29 Nov 2016 12:20:12 -0500 Subject: [PATCH] HHH-11282 - HHH-11287 - HHH-11288 - [ hibernate-enhance-maven-plugin ] m2e/Eclipse integration + requiresDependencyResolution in descriptor + use project artifacts Get artifacts from project, not executionProject --- .../hibernate-enhance-maven-plugin.gradle | 4 +- .../orm/tooling/maven/MavenEnhancePlugin.java | 75 ++++++++----------- .../m2e/lifecycle-mapping-metadata.xml | 18 +++++ .../main/resources/META-INF/maven/plugin.xml | 13 ++++ 4 files changed, 65 insertions(+), 45 deletions(-) create mode 100644 tooling/hibernate-enhance-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml 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 d605dc0e2e..44e74ac0f2 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 79b11e6afe..ee32d8a924 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.File; 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.artifact.Artifact; 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.DefaultEnhancementContext; 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 class MavenEnhancePlugin extends AbstractMojo { 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 @@ public class MavenEnhancePlugin extends AbstractMojo { } // 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 @@ public class MavenEnhancePlugin extends AbstractMojo { } } - 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 @@ public class MavenEnhancePlugin extends AbstractMojo { 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 @@ public class MavenEnhancePlugin extends AbstractMojo { 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 ); - } - finally { - try { - outputStream.close(); - ctClass.detach(); - } - catch (IOException ignore) { - } - } + outputStream = buildContext.newFileOutputStream( file ); + outputStream.write( enhancedBytecode ); + outputStream.flush(); } - catch (FileNotFoundException e) { - String msg = "Error opening class file for writing: " + file.getAbsolutePath(); + 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 ); } - getLog().warn( msg ); + buildContext.addMessage( file, 0, 0, msg, BuildContext.SEVERITY_WARNING, e ); + } + finally { + try { + if( outputStream != null ) { + outputStream.close(); + ctClass.detach(); + } + } + catch (IOException ignore) { + } } } } 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 0000000000..7ae74429fc --- /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 19d92ce67d..730c326848 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