maven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bob Fields (JIRA)" <j...@codehaus.org>
Subject [jira] (MCHECKSTYLE-250) NPE on tying to load LICENSE.txt resource from non-jar plugin dependencies
Date Wed, 18 Feb 2015 14:54:19 GMT

    [ https://jira.codehaus.org/browse/MCHECKSTYLE-250?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=363531#comment-363531
] 

Bob Fields commented on MCHECKSTYLE-250:
----------------------------------------

We use one jar file to store all configurations (pmd, findbugs, checkstyle, etc etc) so they
can easily be distributed to all maven clients and run as part of a standard build, both as
a local develop and on a build server. The config jar is loaded as an extension, so the XML
files can be loaded and referenced as classpath resources. This NPE is preventing us from
using anything beyond v2.12. Wondering why checkstyle would care about a license.txt file
anyway? It's just for checking source code.

Has anybody submitted a patch, to emit a warning and continue processing, rather than silently
fail when this condition occurs?

> NPE on tying to load LICENSE.txt resource from non-jar plugin dependencies
> --------------------------------------------------------------------------
>
>                 Key: MCHECKSTYLE-250
>                 URL: https://jira.codehaus.org/browse/MCHECKSTYLE-250
>             Project: Maven Checkstyle Plugin
>          Issue Type: Bug
>    Affects Versions: 2.13
>            Reporter: Konstantin Pokrovsky
>
> *Steps to reproduce:*
> * Add non jar (XML for example) artifact dependency to plugin dependencies section:
> {code:xml}
>             <plugin>
>                 <groupId>org.apache.maven.plugins</groupId>
>                 <artifactId>maven-checkstyle-plugin</artifactId>
>                 <version>2.13</version>
>                 <dependencies>
>                     <dependency>
>                         <groupId>anygroup</groupId>
>                         <artifactId>anyfile</artifactId>
>                         <type>xml</type>
>                     </dependency>
>                 </dependencies>
>             </plugin>
> {code}
> * Run _checkstyle:check_
> Result:
> {noformat}
> [ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.13:check
(default-cli) on project rt: Execution default-cli of goal org.apache.maven.plugins:maven-checkstyle-plugin:2.13:check
failed. NullPointerException -> [Help 1]
> org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.13:check
(default-cli) on project rt: Execution default-cli of goal org.apache.maven.plugins:maven-checkstyle-plugin:2.13:check
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:57)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         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 default-cli of
goal org.apache.maven.plugins:maven-checkstyle-plugin:2.13:check failed.
>         at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:115)
>         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
>         ... 19 common frames omitted
> Caused by: java.lang.NullPointerException: null
>         at org.codehaus.plexus.resource.loader.JarHolder.getEntries(JarHolder.java:126)
>         at org.codehaus.plexus.resource.loader.JarResourceLoader.loadJar(JarResourceLoader.java:100)
>         at org.codehaus.plexus.resource.loader.JarResourceLoader.initialize(JarResourceLoader.java:63)
>         at org.codehaus.plexus.resource.loader.JarResourceLoader.getResource(JarResourceLoader.java:141)
>         at org.apache.maven.plugin.checkstyle.resource.LicenseResourceManager.getResource(LicenseResourceManager.java:75)
>         at org.codehaus.plexus.resource.DefaultResourceManager.getResourceAsFile(DefaultResourceManager.java:91)
>         at org.apache.maven.plugin.checkstyle.exec.DefaultCheckstyleExecutor.getOverridingProperties(DefaultCheckstyleExecutor.java:520)
>         at org.apache.maven.plugin.checkstyle.exec.DefaultCheckstyleExecutor.getConfiguration(DefaultCheckstyleExecutor.java:347)
>         at org.apache.maven.plugin.checkstyle.exec.DefaultCheckstyleExecutor.executeCheckstyle(DefaultCheckstyleExecutor.java:220)
>         at org.apache.maven.plugin.checkstyle.CheckstyleViolationCheckMojo.execute(CheckstyleViolationCheckMojo.java:532)
>         at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)
>         ... 20 common frames omitted
> {noformat}
> *Investigation:*
> * _CheckstyleViolationCheckMojo_ forms _CheckstyleExecutorRequest_ for the executor by
initializing _licenseArtifacts_ property with all plugin's dependencies.
> {code:java|title=CheckstyleViolationCheckMojo.java:516}
>                 request.setConsoleListener( getConsoleListener() ).setConsoleOutput(
consoleOutput )
>                     .setExcludes( excludes ).setFailsOnError( failsOnError ).setIncludes(
includes )
>                     .setResourceIncludes( resourceIncludes )
>                     .setResourceExcludes( resourceExcludes )
>                     .setIncludeResources( includeResources )
>                     .setIncludeTestResources( includeTestResources )
>                     .setIncludeTestSourceDirectory( includeTestSourceDirectory ).setListener(
getListener() )
>                     .setLog( getLog() ).setProject( project ).setSourceDirectories( getSourceDirectories()
)
>                     .setResources( resources )
>                     .setStringOutputStream( stringOutputStream ).setSuppressionsLocation(
suppressionsLocation )
>                     .setTestSourceDirectories( getTestSourceDirectories() ).setConfigLocation(
configLocation )
>                     .setConfigurationArtifacts( collectArtifacts( "config" ) )
>                     .setPropertyExpansion( propertyExpansion )
>                     .setHeaderLocation( headerLocation ).setLicenseArtifacts( collectArtifacts(
"license" ) )
>                     .setCacheFile( cacheFile ).setSuppressionsFileExpression( suppressionsFileExpression
)
>                     .setEncoding( encoding ).setPropertiesLocation( propertiesLocation
);
>                 checkstyleExecutor.executeCheckstyle( request );
> {code}
>  There is a _licence_ hint parameter passed to dependency initializer, but it is actually
not used. Leaving all dependencies being uses as the license one.
> * _DefaultCheckstyleExecutor_ adds the dependencies to jar search path without checking
the dependency type. I think dependencies should be checked for the jar type:
> {code:java|title=DefaultCheckstyleExecutor.java:836}
>         // MCHECKSTYLE-225: load licenses from additional artifacts, not from classpath
>         if ( additionalArtifacts != null )
>         {
>             for ( Artifact licenseArtifact : additionalArtifacts )
>             {
>                 try
>                 {
>                     resourceManager.addSearchPath( "jar", "jar:" + licenseArtifact.getFile().toURI().toURL()
);
>                 }
>                 catch ( MalformedURLException e )
>                 {
>                     // noop
>                 }
>             }
>         }
> {code}
> * Later Plexus _JarResourceLoader_ fails to load the resource from those non jar dependencies:
> {code:java:title=JarHolder.java:62}
>     public void init()
>     {
>         try
>         {
>             URL url = new URL( urlpath );
>             conn = (JarURLConnection) url.openConnection();
>             conn.setAllowUserInteraction( false );
>             conn.setDoInput( true );
>             conn.setDoOutput( false );
>             conn.connect();
>             theJar = conn.getJarFile();
>         }
>         catch ( IOException ioe )
>         {
>         }
>     }
> {code}
> _init()_ silently suppresses _IOException_ thrown on _connect()_ leaving _theJar_ as
null which causes NPE later referencing _theJar_'s methods. Definitely another bug, but seems
won't be fixed at all since _plexus-resources_ is abandoned.



--
This message was sent by Atlassian JIRA
(v6.1.6#6162)

Mime
View raw message