[ 
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)

Reply via email to