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

William Bakker commented on MSHADE-195:
---------------------------------------

This functionality will start breaking again as Maven implementation has 
changed between Maven 3.0 and Maven 3.3.9

{noformat}
public class org.apache.maven.project:MavenProject:3.0
{
    public void addAttachedArtifact( Artifact artifact )
        throws DuplicateArtifactAttachmentException
    {
        List<Artifact> attachedArtifacts = getAttachedArtifacts();

        if ( attachedArtifacts.contains( artifact ) )
        {
            if ( logger != null )
            {
                logger.warn( "Artifact " + artifact + " already attached to 
project, ignoring duplicate" );
            }
            return;
            //throw new DuplicateArtifactAttachmentException( this, artifact );
        }

        getAttachedArtifacts().add( artifact );
    }
}
{noformat}

{noformat}
public class org.apache.maven.project:MavenProject:3.3.9
{
    /**
     * Add or replace an artifact. This method is now deprecated. Use the 
@{MavenProjectHelper} to attach artifacts to a
     * project. In spite of the 'throws' declaration on this API, this method 
has never thrown an exception since Maven
     * 3.0.x. Historically, it logged and ignored a second addition of the same 
g/a/v/c/t. Now it replaces the file for
     * the artifact, so that plugins (e.g. shade) can change the pathname of 
the file for a particular set of
     * coordinates.
     *
     * @param artifact the artifact to add or replace.
     * @throws DuplicateArtifactAttachmentException
     */
    public void addAttachedArtifact( Artifact artifact )
        throws DuplicateArtifactAttachmentException
    {
        getAttachedArtifacts().add( artifact );
    }
}
{noformat}

Because the list of attached artifacts may contain duplicates again, it should 
be removed first:

{noformat}
project.getAttachedArtifacts().remove(new 
AttachedArtifact(project.getArtifact(), "java-source", "sources", null));
projectHelper.attachArtifact( project, "java-source", "sources", shadedSources 
);
{noformat}


> createSourcesJar with source:jar-no-fork causes sources.jar to be deployed 
> twice, causing the build to fail
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: MSHADE-195
>                 URL: https://issues.apache.org/jira/browse/MSHADE-195
>             Project: Maven Shade Plugin
>          Issue Type: Bug
>    Affects Versions: 2.3, 2.4
>            Reporter: Esko Luontola
>            Assignee: Christian Schulte
>             Fix For: 2.4.3
>
>         Attachments: MSHADE-195-example.zip
>
>
> The workaround described in https://issues.apache.org/jira/browse/MSHADE-120 
> (i.e. running maven-source-plugin's jar-no-fork goal before shading) causes 
> the problem that Maven will install and deploy the same sources.jar file 
> twice:
> {noformat}
> [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ 
> pricing-client ---
> [INFO] Installing xxx/pricing-client/target/pricing-client-0-SNAPSHOT.jar to 
> xxx/pricing-client/0-SNAPSHOT/pricing-client-0-SNAPSHOT.jar
> [INFO] Installing xxx/pricing-client/target/dependency-reduced-pom.xml to 
> xxx/pricing-client/0-SNAPSHOT/pricing-client-0-SNAPSHOT.pom
> [INFO] Installing 
> xxx/pricing-client/target/pricing-client-0-SNAPSHOT-sources.jar to 
> xxx/pricing-client/0-SNAPSHOT/pricing-client-0-SNAPSHOT-sources.jar
> [INFO] Installing 
> xxx/pricing-client/target/pricing-client-0-SNAPSHOT-sources.jar to 
> xxx/pricing-client/0-SNAPSHOT/pricing-client-0-SNAPSHOT-sources.jar
> {noformat}
> With maven-install-plugin this doesn't matter that much, but with 
> maven-deploy-plugin it *fails the build*, because it tries to upload the 
> sources.jar twice to the Maven repository and _Nexus doesn't allow that_:
> {noformat}
> [ERROR] Failed to execute goal 
> org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on 
> project project: Failed to deploy artifacts: Could not transfer artifact 
> xxx.availability:availability-client:jar:sources:1.0.24 from/to xxx-releases 
> (http://xxx/nexus/content/repositories/releases): Failed to transfer file: 
> http://xxx/nexus/content/repositories/releases/xxxx/availability/availability-client/1.0.24/availability-client-1.0.24-sources.jar.
>  Return code is: 400, ReasonPhrase: Bad Request.
> {noformat}
> I'm suspecting this to be something like the maven-source-plugin and 
> maven-shade-plugin both attaching the same sources.jar to the build, when 
> only one of them should do it. This problem only happens with the sources jar 
> and not the main artifact, so a trick similar to replacing the main artifact 
> is needed also for the sources jar.
> h4. Workaround
> Configure maven-source-plugin with {{<attach>false</attach>}}. Then the shade 
> plugin will find the sources and include them in the shaded sources jar, but 
> the sources jar won't be attached to the build twice.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to