提交 22317ad5 编写于 作者: O olivier lamy

prevent NPE when pluginDescriptor.classRealm is null

上级 3850056b
...@@ -41,6 +41,7 @@ import java.util.logging.Logger; ...@@ -41,6 +41,7 @@ import java.util.logging.Logger;
import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.codehaus.plexus.classworlds.realm.ClassRealm;
import org.kohsuke.stapler.Stapler; import org.kohsuke.stapler.Stapler;
/** /**
...@@ -97,7 +98,12 @@ public final class ExecutedMojo implements Serializable { ...@@ -97,7 +98,12 @@ public final class ExecutedMojo implements Serializable {
PluginDescriptor pd = md.getPluginDescriptor(); PluginDescriptor pd = md.getPluginDescriptor();
try { try {
Class<?> clazz = getMojoClass( md, pd ); Class<?> clazz = getMojoClass( md, pd );
digest = Util.getDigestOf(new FileInputStream(Which.jarFile(clazz))); if (clazz!=null) {
digest = Util.getDigestOf(new FileInputStream(Which.jarFile(clazz)));
} else {
LOGGER.log(Level.WARNING, "Failed to getClass for "+md.getImplementation());
}
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
LOGGER.log(Level.WARNING, "Failed to locate jar for "+md.getImplementation(),e); LOGGER.log(Level.WARNING, "Failed to locate jar for "+md.getImplementation(),e);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
...@@ -111,10 +117,13 @@ public final class ExecutedMojo implements Serializable { ...@@ -111,10 +117,13 @@ public final class ExecutedMojo implements Serializable {
private Class<?> getMojoClass(MojoDescriptor md, PluginDescriptor pd) throws ClassNotFoundException { private Class<?> getMojoClass(MojoDescriptor md, PluginDescriptor pd) throws ClassNotFoundException {
try { try {
return pd.getClassRealm().loadClass( md.getImplementation() ); ClassRealm classRealm = pd.getClassRealm();
return classRealm == null ? null : classRealm.loadClass( md.getImplementation() );
} catch (NoSuchMethodError e) { } catch (NoSuchMethodError e) {
// maybe we are in maven2 build ClassRealm package has changed // maybe we are in maven2 build ClassRealm package has changed
return getMojoClassForMaven2( md, pd ); return getMojoClassForMaven2( md, pd );
} catch ( NullPointerException e ) {
throw e;
} }
} }
...@@ -125,6 +134,10 @@ public final class ExecutedMojo implements Serializable { ...@@ -125,6 +134,10 @@ public final class ExecutedMojo implements Serializable {
org.codehaus.classworlds.ClassRealm cl = org.codehaus.classworlds.ClassRealm cl =
(org.codehaus.classworlds.ClassRealm) ReflectionUtils.invokeMethod( method, pd ); (org.codehaus.classworlds.ClassRealm) ReflectionUtils.invokeMethod( method, pd );
if (cl==null)
{
return null;
}
Class<?> clazz = cl.loadClass( md.getImplementation() ); Class<?> clazz = cl.loadClass( md.getImplementation() );
return clazz; return clazz;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册