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