[
https://jira.codehaus.org/browse/MCHECKSTYLE-250?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dennis Lundberg closed MCHECKSTYLE-250.
---------------------------------------
Resolution: Fixed
Fix Version/s: 2.15
Assignee: Dennis Lundberg
> 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
> Assignee: Dennis Lundberg
> Fix For: 2.15
>
>
> *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)