Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-5009

Switch activemq-all from shaded jar to pom dependency aggregator

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Abandoned
    • 5.9.0
    • None
    • None
    • Patch Available

    Description

      I encountered an issue when adding a dependency on activemq-all into my project; it caused a collision with our existing dependency on slf4j-log4j12

      SLF4J: Class path contains multiple SLF4J bindings.
      SLF4J: Found binding in [jar:file:/root/.m2/repository/org/slf4j/slf4j-log4j12/1.6.2/slf4j-log4j12-1.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
      SLF4J: Found binding in [jar:file:/root/.m2/repository/org/apache/activemq/activemq-all/5.9.0/activemq-all-5.9.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
      SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
      

      The main issue is that because the activemq-all jar is shaded there is no way for us to use maven dependency exclusions command to not take the activemq-all contributed slf4j-log4j12 artifact.

      There is a straight forward fix to this issue.

      Switch from using the maven-shade-plugin to using a pom dependency which aggregates the activemq dependencies in a maven controllable way.

      By making the packaging of the activemq-all artifact pom it means that when it is included in a project only the transitive dependencies that it declares are included, the pom artifact itself is not.

      I've tested that this works in our project that depends on activemq-all 5.9.0 and also have a patch prepared against the current 5.10-SNAPSHOT trunk.

      The only difference to the consumer of the activemq-all artifact is that they have to specify the <type> as pom.

      For example:

      <dependency>
          <groupId>org.apache.activemq</groupId>
          <artifactId>activemq-all</artifactId>
          <version>5.9.0</version>
          <type>pom</type>
      </dependency>
      

      The Apache Wicket project uses the same approach, see here

      Attachments

        Activity

          People

            Unassigned Unassigned
            michael.ocleirigh Michael O'Cleirigh
            Votes:
            7 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: