Richard Downer created BROOKLYN-156:
---------------------------------------

             Summary: brooklyn-client project has horrendous dependency issues
                 Key: BROOKLYN-156
                 URL: https://issues.apache.org/jira/browse/BROOKLYN-156
             Project: Brooklyn
          Issue Type: Bug
    Affects Versions: 0.7.0, 0.8.0
            Reporter: Richard Downer


`brooklyn-client` allows third-party Java code to make API calls to Brooklyn. 
However it is very difficult to use as it carries with it a huge set of 
transitive dependencies, which has the effect of enforcing policy on downstream 
consumers of Brooklyn. Worse still, some of its dependencies conflict with each 
other, which can cause runtime failures.

[INFO] org.apache.brooklyn:brooklyn-rest-client:jar:0.8.0-SNAPSHOT
[INFO] +- org.apache.brooklyn:brooklyn-rest-api:jar:0.8.0-SNAPSHOT:compile
[INFO] |  +- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile
[INFO] |  +- com.sun.jersey.contribs:jersey-multipart:jar:1.18.1:compile
[INFO] |  |  \- org.jvnet.mimepull:mimepull:jar:1.9.3:compile
[INFO] |  +- javax.validation:validation-api:jar:1.0.0.GA:compile
[INFO] |  +- com.google.code.findbugs:jsr305:jar:2.0.1:compile
[INFO] |  +- commons-lang:commons-lang:jar:2.4:compile
[INFO] |  +- com.wordnik:swagger-core_2.9.1:jar:1.0.1:compile
[INFO] |  +- 
org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:compile
[INFO] |  +- 
org.apache.brooklyn:brooklyn-utils-common:jar:0.8.0-SNAPSHOT:compile
[INFO] |  |  +- ch.qos.logback:logback-classic:jar:1.0.7:compile
[INFO] |  |  |  \- ch.qos.logback:logback-core:jar:1.0.7:compile
[INFO] |  |  +- org.slf4j:jul-to-slf4j:jar:1.6.6:compile
[INFO] |  |  \- 
org.apache.brooklyn:brooklyn-logback-includes:jar:0.8.0-SNAPSHOT:compile
[INFO] |  \- 
org.apache.brooklyn:brooklyn-utils-rest-swagger:jar:0.8.0-SNAPSHOT:compile
[INFO] |     \- com.wordnik:swagger-jaxrs_2.9.1:jar:1.0.1:compile
[INFO] |        \- org.scala-lang:scala-library:jar:2.9.1-1:compile
[INFO] +- org.apache.brooklyn:brooklyn-api:jar:0.8.0-SNAPSHOT:compile
[INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:3.0.8.Final:compile
[INFO] |  +- 
org.jboss.spec.javax.annotation:jboss-annotations-api_1.1_spec:jar:1.0.1.Final:compile
[INFO] |  +- javax.activation:activation:jar:1.1:compile
[INFO] |  +- org.apache.httpcomponents:httpclient:jar:4.4.1:compile
[INFO] |  +- commons-io:commons-io:jar:2.4:compile
[INFO] |  \- net.jcip:jcip-annotations:jar:1.0:compile
[INFO] +- org.jboss.resteasy:resteasy-jackson-provider:jar:3.0.8.Final:compile
[INFO] +- org.jboss.resteasy:jaxrs-api:jar:3.0.8.Final:compile
[INFO] +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
[INFO] +- org.codehaus.jackson:jackson-jaxrs:jar:1.9.13:compile
[INFO] +- org.codehaus.jackson:jackson-xc:jar:1.9.13:compile
[INFO] +- com.sun.jersey:jersey-core:jar:1.18.1:compile
[INFO] +- org.eclipse.jetty:jetty-webapp:jar:8.1.17.v20150415:compile
[INFO] |  +- org.eclipse.jetty:jetty-xml:jar:8.1.17.v20150415:compile
[INFO] |  |  \- org.eclipse.jetty:jetty-util:jar:8.1.17.v20150415:compile
[INFO] |  \- org.eclipse.jetty:jetty-servlet:jar:8.1.17.v20150415:compile
[INFO] |     \- org.eclipse.jetty:jetty-security:jar:8.1.17.v20150415:compile
[INFO] +- org.eclipse.jetty:jetty-server:jar:8.1.17.v20150415:compile
[INFO] |  +- org.eclipse.jetty:jetty-continuation:jar:8.1.17.v20150415:compile
[INFO] |  \- org.eclipse.jetty:jetty-http:jar:8.1.17.v20150415:compile
[INFO] |     \- org.eclipse.jetty:jetty-io:jar:8.1.17.v20150415:compile
[INFO] +- com.google.guava:guava:jar:17.0:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.6.6:compile
[INFO] +- javax.ws.rs:jsr311-api:jar:1.1.1:compile
[INFO] +- com.google.code.gson:gson:jar:2.3:compile

Some examples of problems here:

  * These dependencies contain within them conflicting implementations of the 
javax.ws classes. This is a major problem which causes runtime errors if the 
"wrong" version ends up at the front of the classpath.
  * It is bringing in Jetty, a web server
  * It depends on some Jersey components. If the downstream project is also 
using Jersey, then it must use the same version. Similar issues exist for 
Jackson, SLF4J, Jetty and others.
  * It brings in logback. If the downstream project is using SLF4J, it is 
forced to use logback as an implementation.

brooklyn-client needs to be *much* lighter than it currently is, it must not 
contain conflicting dependencies, and it should have as small a dependency 
footprint as possible.



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

Reply via email to