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