Skip to content

Commit

Permalink
HHH-11282 - HHH-11287 - HHH-11288 - [ hibernate-enhance-maven-plugin …
Browse files Browse the repository at this point in the history
…] m2e/Eclipse integration + requiresDependencyResolution in descriptor + use project artifacts

Get artifacts from project, not executionProject
  • Loading branch information
candrews authored and gbadner committed Jan 27, 2017
1 parent 82310d8 commit aaf9554
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 43 deletions.
Expand Up @@ -16,6 +16,7 @@ repositories {
}

processResources {
include "**/lifecycle-mapping-metadata.xml"
include "**/plugin-help.xml"
into processResources.destinationDir
filter(ReplaceTokens, tokens: ['version' : project.version])
Expand All @@ -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 )
Expand Down Expand Up @@ -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.'
}
}
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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.
*
Expand All @@ -55,6 +58,9 @@ public class MavenEnhancePlugin extends AbstractMojo {
*/
private List<File> sourceSet = new ArrayList<File>();

@Component
private BuildContext buildContext;

@Parameter(property = "dir", defaultValue = "${project.build.outputDirectory}")
private String dir;

Expand Down Expand Up @@ -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() + "]" );
Expand All @@ -176,13 +174,8 @@ private ClassLoader toClassLoader(List<File> runtimeClasspath) throws MojoExecut
}

// HHH-10145 Add dependencies to classpath as well - all but the ones used for testing purposes
Set<Artifact> 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<Artifact> artifacts = project.getArtifacts();
if ( artifacts != null) {
for ( Artifact a : artifacts ) {
if ( !Artifact.SCOPE_TEST.equals( a.getScope() ) ) {
Expand Down Expand Up @@ -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() );
}
Expand All @@ -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;
}
}
Expand Down Expand Up @@ -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 );
}
}
}
@@ -0,0 +1,18 @@
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<goals>
<goal>enhance</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>true</runOnIncremental>
<runOnConfiguration>false</runOnConfiguration>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>

Expand Up @@ -24,6 +24,7 @@
<aggregator>false</aggregator>
<requiresOnline>false</requiresOnline>
<inheritedByDefault>true</inheritedByDefault>
<requiresDependencyResolution>compile+runtime</requiresDependencyResolution>
<phase>compile</phase>
<executePhase>compile</executePhase>
<executeGoal>enhance</executeGoal>
Expand Down Expand Up @@ -84,6 +85,12 @@
<enableAssociationManagement>false</enableAssociationManagement>
<enableExtendedEnhancement>false</enableExtendedEnhancement>
</configuration>
<requirements>
<requirement>
<role>org.sonatype.plexus.build.incremental.BuildContext</role>
<field-name>buildContext</field-name>
</requirement>
</requirements>
</mojo>
</mojos>
<dependencies>
Expand All @@ -96,6 +103,12 @@
<type>jar</type>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-build-api</artifactId>
<type>jar</type>
<version>0.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
Expand Down

0 comments on commit aaf9554

Please sign in to comment.