mojohaus / extra-enforcer-rules

Extra Enforcer Rules
https://www.mojohaus.org/extra-enforcer-rules/
Apache License 2.0
73 stars 47 forks source link

EnforceBytecodeVersion crashes on maven-enforcer-plugin 1.4.1 with a NullPointerException #13

Closed mrothe closed 8 years ago

mrothe commented 8 years ago

Using the EnforceBytecodeVersion rule on maven-enforcer-plugin:1.4.1 cause a NullPointerException:

Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce (checkBytecodeVersion) on project XXX: Execution checkBytecodeVersion of goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce failed. at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:224) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) at org.apache.maven.cli.MavenCli.main(MavenCli.java:158) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: org.apache.maven.plugin.PluginExecutionException: Execution checkBytecodeVersion of goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce failed. at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:115) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 19 more Caused by: java.lang.NullPointerException at org.apache.maven.plugins.enforcer.EnforceBytecodeVersion.isBadArtifact(EnforceBytecodeVersion.java:221) at org.apache.maven.plugins.enforcer.EnforceBytecodeVersion.checkDependencies(EnforceBytecodeVersion.java:206) at org.apache.maven.plugins.enforcer.EnforceBytecodeVersion.handleArtifacts(EnforceBytecodeVersion.java:132) at org.apache.maven.plugins.enforcer.AbstractResolveDependencies.execute(AbstractResolveDependencies.java:77) at org.apache.maven.plugins.enforcer.EnforceMojo.execute(EnforceMojo.java:193) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106) ... 20 more

It works with enforcer 1.3.1 and 1.4.

khmarbaise commented 8 years ago

Do you have an example project which produces the issue?

mrothe commented 8 years ago

Yes, I can provide an example (unfortunally this issue tracker won't let me add a pom.xml or pom.txt as attachment :( - so I have to add the pom content directly):

<?xml version="1.0" encoding="UTF-8"?>

4.0.0 ``` ag.itc.test parent 1-SNAPSHOT Test Parent pom org.slf4j slf4j-api 1.7.12 provided [3.0.5,3.4) 1.4.1 1.0-beta-3 maven-enforcer-plugin ${maven-enforcer-plugin.version} org.codehaus.mojo extra-enforcer-rules ${enforcer-extra-rules.version} enforceVersions validate enforce ${enforcer.requireMavenVersion} checkBytecodeVersion validate enforce false 1.6 true maven-enforcer-plugin ```

The problem is caused by the dependency declaration. If it is removed all runs fine. If it is defined, the rule execution crash with a NPE ... probably because a POM artifact hasn't "real" dependencies ? But we need/use such declarations in our parent pom to force all projects to rely on some basic dependencies

batmat commented 8 years ago

What would be absolutely great would be to submit a PR with a new (failing) IT. I'll personally have a look very soon if you do.

If you don't I will see if I can create one with the text you just put. Cheers Le 1 oct. 2015 1:21 PM, "mrothe" notifications@github.com a écrit :

Yes, I can provide an example (unfortunally this issue tracker won't let me add a pom.xml or pom.txt as attachment :( - so I have to add the pom content directly):

<?xml version="1.0" encoding="UTF-8"?>

4.0.0

ag.itc.test parent 1-SNAPSHOT Test Parent pom org.slf4j slf4j-api 1.7.12 provided [3.0.5,3.4) 1.4.1 1.0-beta-3 maven-enforcer-plugin ${maven-enforcer-plugin.version} org.codehaus.mojo extra-enforcer-rules ${enforcer-extra-rules.version} enforceVersions validate enforce ${enforcer.requireMavenVersion} checkBytecodeVersion validate enforce false 1.6 true maven-enforcer-plugin

The problem is caused by the dependency declaration. If it is removed all runs fine. If it is defined, the rule execution crash with a NPE ... probably because a POM artifact hasn't "real" dependencies ? But we need/use such declarations in our parent pom to force all projects to rely on some basic dependencies

— Reply to this email directly or view it on GitHub https://github.com/mojohaus/extra-enforcer-rules/issues/13#issuecomment-144700632 .

mrothe commented 8 years ago

@batmat : I'm afraid I'm unable to submit such an test case as

Sorry for that.

@khmarbaise : I had a look on the changes between enforcer 1.4 and 1.4.1 to find the root cause. This led me to https://issues.apache.org/jira/browse/MENFORCER-222 and https://issues.apache.org/jira/browse/MENFORCER-156. The requiresDependencyCollection annotation cause the null file from artifact.getFile(). So with the return of this annotation in 1.4.1 MENFORCER-156 should be reopened as assembly fail again if used with enforcer 1.4.1:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single (assemble) on project parent: Execution assemble of goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single failed. at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:224) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at ... Caused by: java.lang.NullPointerException at org.apache.maven.plugin.assembly.archive.archiver.AssemblyProxyArchiver$DefaultFileInfo.isFile(AssemblyProxyArchiver.java:871) at org.apache.maven.plugin.assembly.filter.ComponentsXmlArchiverFileFilter.isSelected(ComponentsXmlArchiverFileFilter.java:193) at org.apache.maven.plugin.assembly.archive.archiver.AssemblyProxyArchiver.acceptFile(AssemblyProxyArchiver.java:825) at org.apache.maven.plugin.assembly.archive.archiver.AssemblyProxyArchiver.addFile(AssemblyProxyArchiver.java:450) at org.apache.maven.plugin.assembly.archive.task.AddArtifactTask.execute(AddArtifactTask.java:208) at ... There is a trade-off between MENFORCER-156 and MENFORCER-194, MENFORCER-222, MENFORCER-230. Some things work with enforcer 1.2, 1.3.1 and 1.4 and others with 1.3 and 1.4.1 :(

khmarbaise commented 8 years ago

The problem is located by using a dependency in a pom which packaging is pom which is usually bad practice nor is it really correct...Usually you should use a dependencyManagement in a parent pom like this.