[ 
https://issues.apache.org/jira/browse/MNG-6641?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16819412#comment-16819412
 ] 

Dale King commented on MNG-6641:
--------------------------------

I don't have a project I can share to reproduce it but I can tell you what 
caused the validation failure to begin with. We have our own plugin that tries 
to override the version coming from the POM with one that it computes based on 
a number of factors. And it had these lines:

{{    
project.getArtifact().setVersionRange(VersionRange.createFromVersion(version));}}
 {{    project.getArtifact().setVersion(version);}}

The code for DefaultArtifact.setVersion actually nulls out the version range 
that we set on the line before. The source plugin uses AttachedArtifact and 
AttachedArtifact basically will not work without a version range. The 
validations 
[here|https://github.com/apache/maven/blob/44826ab446d1115d464e73e7e308df36dcf7d39b/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java#L147]
 check to make sure that either versionRange or version is non-null, but 
because this is called from the constructor version will ALWAYS be null so the 
only way to pass the validations is to have a versionRange.

We were able to fix our problem by switching from calling setVersion to calling 
selectVersion which does not null out the versionRange, but the problem with 
the validations throwing an NPE instead of an intelligent message is still 
there.

So to summarize a reproduction would be to simply call 

{{    project.getArtifact().setVersion(project.getArtifact().getVersion());}}

in a plugin and also invoke the maven-source-plugin.

> NPE from AttachedArtifact.getVersion rather than meaningful error
> -----------------------------------------------------------------
>
>                 Key: MNG-6641
>                 URL: https://issues.apache.org/jira/browse/MNG-6641
>             Project: Maven
>          Issue Type: Bug
>          Components: Errors
>    Affects Versions: 3.6.0
>         Environment: any
>            Reporter: Dale King
>            Priority: Minor
>             Fix For: waiting-for-feedback
>
>
> This issue is basically re-reporting issue 
> https://issues.apache.org/jira/browse/MNG-4731, which was closed in the great 
> Jira clean up of 2014. 5 years later I can report it is still an issue.
> The issue occurs when the information passed to AttachedArtifact violates any 
> of the validations in DefaultArtifact.validateIdentity(). The call to 
> getVersion() will throw an NPE because it is overridable in the 
> DefaultArtifact and parent has not been initialized yet in AttachedArtifact. 
> MNG-4731 explains this more clearly.
> A comment on that ticket suggests that the problem is that AttachedArtifact 
> was called directly instead of using MavenProjectHelper.attachArtifact(). 
> That is not true as can be seen from my stack trace:
> {noformat}
> Caused by: java.lang.NullPointerException
>     at org.apache.maven.project.artifact.AttachedArtifact.getVersion 
> (AttachedArtifact.java:138)
>     at org.apache.maven.artifact.DefaultArtifact.validateIdentity 
> (DefaultArtifact.java:149)
>     at org.apache.maven.artifact.DefaultArtifact.<init> 
> (DefaultArtifact.java:124)
>     at org.apache.maven.project.artifact.AttachedArtifact.<init> 
> (AttachedArtifact.java:49)
>     at org.apache.maven.project.DefaultMavenProjectHelper.attachArtifact 
> (DefaultMavenProjectHelper.java:63)
>     at org.apache.maven.plugins.source.AbstractSourceJarMojo.packageSources 
> (AbstractSourceJarMojo.java:324)
>     at org.apache.maven.plugins.source.AbstractSourceJarMojo.packageSources 
> (AbstractSourceJarMojo.java:253)
>     at org.apache.maven.plugins.source.AbstractSourceJarMojo.execute 
> (AbstractSourceJarMojo.java:216)
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to