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

ASF GitHub Bot commented on STORM-1012:
---------------------------------------

Github user revans2 commented on a diff in the pull request:

    https://github.com/apache/storm/pull/736#discussion_r40823287
  
    --- Diff: DEVELOPER.md ---
    @@ -222,6 +222,11 @@ To pull in a merge request you should generally follow 
the command line instruct
     
     # Build the code and run the tests
     
    +Storm has some oddities with packaging and plugin dependencies.  We build 
our own plugins and shade storm-core,
    +but have sub-modules that depend on storm-core.  Because of this the build 
needs to be split into two parts.
    --- End diff --
    
    Essentially what happens is that if you build a multi-module project where 
one module depends on another module that is a part of the same build, maven 
tries to be smart and will use the pom.xml and .jar or .class directory from 
the module that is a dependency.
    
    So if we have a project set up like the following where we have b depends 
on a, and a is shaded.  b will see different versions of the code and pom.xml 
from a depending on what maven command is run.
    
    - base/
      - pom.xml
      - a/
        - pom.xml
        - dependency-reduce-pom.xml
        - target/
          - classes/
          - a.jar (shaded)
          - a.orig.jar (no-shaded)
      - b/
        - pom.xml (depends on a)
    
    If I run `mvn clean compile` the classpath for compiling b will include 
`base/a/target/classes` which is not shaded, and if b is written to use a 
shaded class it will fail to compile.  b will also see the full set of 
non-shaded dependencies from a, so if b is creating an uber jar, it will assume 
that all of those dependencies will be provided by a, when in reality they will 
not be.
    
    If I run `mvn clean package` or `mvn clean install` b will see the shaded 
a.jar on its classpath, but it will still see the full non-shaded set of a's 
dependencies.
    
    The only way I found to make b use the dependency-reduced-pom.xml from a, 
is to first build/install a without b, and then build/install b without a.  
That way a will install the shaded jar and dependency-reduced-pom.xml into the 
local repository.  Then b will get its dependencies from the local repo instead 
of trying to rebuild a.
    
    I'll try to add this to the documentation. 


> Shade Jackson dependency
> ------------------------
>
>                 Key: STORM-1012
>                 URL: https://issues.apache.org/jira/browse/STORM-1012
>             Project: Apache Storm
>          Issue Type: Bug
>          Components: storm-core
>            Reporter: Parth Brahmbhatt
>            Assignee: Parth Brahmbhatt
>             Fix For: 0.11.0
>
>
> Shading jackson dependency.



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

Reply via email to