You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Igor Dvorzhak (JIRA)" <ji...@apache.org> on 2018/04/16 00:06:00 UTC

[jira] [Comment Edited] (MSHADE-154) Add ability for shade to find primary artifact from attached artifacts (similar to assembly-plugin)

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

Igor Dvorzhak edited comment on MSHADE-154 at 4/16/18 12:05 AM:
----------------------------------------------------------------

I found workaround, you need to package both main jar and jar with classifier and then detach main jar from project after shading:
{code:xml}
<!-- Package both main jar and jar with classifier -->
<plugin>
  <artifactId>maven-jar-plugin</artifactId>
  <executions>
    <!-- Define execution with new id to not override 'default-jar' execution -->
    <execution>
      <id>classifier-jar</id>
      <goals>
        <goal>jar</goal>
      </goals>
      <configuration>
        <classifier>${classifier}</classifier>
      </configuration>
    </execution>
  </executions>
</plugin>

<!-- Shade main jar -->
<plugin>
  <artifactId>maven-shade-plugin</artifactId>
  . . .
</plugin>

<!-- Remove main jar from project after shading -->
<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <executions>
    <execution>
      <id>remove-primary-artifact</id>
      <phase>package</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>project.getArtifact().setFile(null)</source>
      </configuration>
    </execution>
  </executions>
</plugin>
{code}


was (Author: medb):
I found workaround, you need to package both main jar and jar with classifier and then detach main jar from project after shading:
{code:xml}
<!-- Package both main jar and jar with classifier -->
<plugin>
  <artifactId>maven-jar-plugin</artifactId>
  <goals>
    <goal>jar</goal>
  </goals>
  <executions>
    <execution>
      <id>classifier-jar</id>
      <goals>
        <goal>jar</goal>
      </goals>
      <configuration>
        <classifier>${classifier}</classifier>
      </configuration>
    </execution>
  </executions>
</plugin>

<!-- Shade main jar -->
<plugin>
  <artifactId>maven-shade-plugin</artifactId>
  . . .
</plugin>

<!-- Remove main jar from project after shading -->
<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <executions>
    <execution>
      <id>remove-primary-artifact</id>
      <phase>package</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>project.getArtifact().setFile(null)</source>
      </configuration>
    </execution>
  </executions>
</plugin>
{code}

> Add ability for shade to find primary artifact from attached artifacts (similar to assembly-plugin)
> ---------------------------------------------------------------------------------------------------
>
>                 Key: MSHADE-154
>                 URL: https://issues.apache.org/jira/browse/MSHADE-154
>             Project: Maven Shade Plugin
>          Issue Type: New Feature
>    Affects Versions: 2.0
>         Environment: all
>            Reporter: Richard Sand
>            Priority: Major
>         Attachments: patch.txt, patch139and154.txt
>
>
> When switching from assembly-plugin to shade-plugin for a given project, I discovered that the shade plugin did not have the capability of using an attached artifact as the primary artifact - only the project's main artifact was supported.
> I've attached changes to add a configuration parameter "alternativeInputClassifier", which, when specified, tells the plugin to look for an artifact with the specified classifier in the project attachments, and to use that as the primary artifact. This makes shade behave similar to assembly-plugin, and allows shade to recognize attached artifacts generated by previous plugins in a maven execution.
> This was a trivial change, but required modifying several other classes and methods to accept the "primary" artifact as a parameter instead of a global variable. IMHO these changes are good for the plugin as a whole, as it will allow for future flexibility and logic for determining the entrypoint for the plugin (e.g. being able to run as a standalone goal with a specific artifact as input).



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