Right now attached artifacts are added to a list. If we only want to allow one attached artifact for a coordinate then we can change that to a map and let the lifecycle update/replace the attachments. This way there cannot be duplicates which is likely what we want versus what’s there now. This internal change would potentially reduce the number of attached artifacts but at first blush I can’t see this doing any harm.
> On Aug 20, 2015, at 3:51 AM, Karl Heinz Marbaise <[email protected]> wrote: > > Hi, > > someone ? > > On 8/9/15 3:21 PM, Karl Heinz Marbaise wrote: >> Hi, >> >> After diving into the above issue i stumbled over several things... >> >> If you take a look here and the log output excerpt: >> >> INFO] Minimized 2341 -> 1293 >> [INFO] Minimized 3282 -> 2234 >> [INFO] Replacing original artifact with shaded artifact. >> [INFO] Replacing >> /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT.jar >> with >> /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-shaded.jar >> >> [INFO] Replacing original source artifact with shaded source artifact. >> [INFO] Replacing >> /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-sources.jar >> with >> /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-shaded-sources.jar >> >> [INFO] Dependency-reduced POM written at: >> /Users/kama/ws-git/apache/mshade/mshade-195/dependency-reduced-pom.xml >> [INFO] >> [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ >> MSHADE-195-example --- >> [INFO] Installing >> /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT.jar >> to >> /Users/kama/.m2/repository/com/example/MSHADE-195-example/1-SNAPSHOT/MSHADE-195-example-1-SNAPSHOT.jar >> >> [INFO] Installing >> /Users/kama/ws-git/apache/mshade/mshade-195/dependency-reduced-pom.xml >> to >> /Users/kama/.m2/repository/com/example/MSHADE-195-example/1-SNAPSHOT/MSHADE-195-example-1-SNAPSHOT.pom >> >> [INFO] Installing >> /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-sources.jar >> to >> /Users/kama/.m2/repository/com/example/MSHADE-195-example/1-SNAPSHOT/MSHADE-195-example-1-SNAPSHOT-sources.jar >> >> [INFO] Installing >> /Users/kama/ws-git/apache/mshade/mshade-195/target/MSHADE-195-example-1-SNAPSHOT-sources.jar >> to >> /Users/kama/.m2/repository/com/example/MSHADE-195-example/1-SNAPSHOT/MSHADE-195-example-1-SNAPSHOT-sources.jar >> >> [INFO] >> >> Install plugin tries to install two identical artifacts which will work >> for maven-install-plugin but would fail for a deploy to a repository >> manager (releases? etc. >> >> So after diving into the problem i found the following code in >> maven-core (MavenProject.java): >> >> /** >> * 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 ); >> } >> >> public List<Artifact> getAttachedArtifacts() >> { >> if ( attachedArtifacts == null ) >> { >> attachedArtifacts = new ArrayList<>(); >> } >> return attachedArtifacts; >> } >> >> So taking a look into MavenProjectHelper.java and the implementation >> (DefaultMavenProjectHelper.java). >> >> /** >> * Add an attached artifact or replace the file for an existing >> artifact. >> * >> * @see >> MavenProject#addAttachedArtifact(org.apache.maven.artifact.Artifact) >> * @param project project reference. >> * @param artifact artifact to add or replace. >> */ >> public void attachArtifact( MavenProject project, Artifact artifact ) >> { >> project.addAttachedArtifact( artifact ); >> } >> >> >> which means that there is not check if an artifacts is already attached. >> >> This means two things from my point of view: >> >> Change the maven-core (checking for duplicate attaches) and furthermore >> plugins which are adding this should check themself if the artifact >> already exist? >> >> WDYT ? Better idea/suggestions ? >> >> >> Kind regards >> Karl Heinz Marbaise >> >> https://issues.apache.org/jira/browse/MNG-5868 >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > > Mit freundlichem Gruß > Karl-Heinz Marbaise > -- > SoftwareEntwicklung Beratung Schulung Tel.: +49 (0) 2405 / 415 893 > Dipl.Ing.(FH) Karl-Heinz Marbaise USt.IdNr: DE191347579 > Hauptstrasse 177 > 52146 Würselen http://www.soebes.de > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > Thanks, Jason ---------------------------------------------------------- Jason van Zyl Founder, Takari and Apache Maven http://twitter.com/jvanzyl http://twitter.com/takari_io --------------------------------------------------------- People develop abstractions by generalizing from concrete examples. Every attempt to determine the correct abstraction on paper without actually developing a running system is doomed to failure. No one is that smart. A framework is a resuable design, so you develop it by looking at the things it is supposed to be a design of. The more examples you look at, the more general your framework will be. -- Ralph Johnson & Don Roberts, Patterns for Evolving Frameworks --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
