fabric8io / kubernetes-client

Java client for Kubernetes & OpenShift
http://fabric8.io
Apache License 2.0
3.41k stars 1.46k forks source link

Add dependency on jackson-core explict #405

Closed davsclaus closed 8 years ago

davsclaus commented 8 years ago

In the pom.xml there is only deps on some jackson modules, but the -core is not listed https://github.com/fabric8io/kubernetes-client/blob/master/kubernetes-client/pom.xml#L191

This can lead to maven build a dependency:tree where jackson-core gets resolved as test scope instead of compile. That leads to NoClassDefFoundError at runtime

Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonParseException
    at io.fabric8.kubernetes.client.BaseClient.rootPaths(BaseClient.java:140)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isOpenShift(OpenshiftAdapterSupport.java:51)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isAdaptable(OpenshiftAdapterSupport.java:35)
    at io.fabric8.kubernetes.client.AutoAdaptableKubernetesClient.adapt(AutoAdaptableKubernetesClient.java:104)
    at io.fabric8.kubernetes.client.AutoAdaptableKubernetesClient.<init>(AutoAdaptableKubernetesClient.java:93)

I tracked this down to fabric8-arquillian uses jackson also and it set the scope to test, which builds a tree like (sorry for long paste)

[INFO] ------------------------------------------------------------------------
[INFO] Building Fabric8 :: Quickstarts :: CDI :: Camel with HTTP as client 2.3-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ cdi-camel-http ---
[INFO] io.fabric8.quickstarts:cdi-camel-http:jar:2.3-SNAPSHOT
[INFO] +- org.apache.camel:camel-core:jar:2.18-SNAPSHOT:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.7.21:compile
[INFO] |  +- com.sun.xml.bind:jaxb-core:jar:2.2.11:compile
[INFO] |  \- com.sun.xml.bind:jaxb-impl:jar:2.2.11:compile
[INFO] +- org.apache.camel:camel-cdi:jar:2.18-SNAPSHOT:compile
[INFO] +- org.apache.camel:camel-kubernetes:jar:2.18-SNAPSHOT:compile
[INFO] |  +- io.fabric8:kubernetes-client:jar:1.3.90:compile
[INFO] |  |  +- io.fabric8:kubernetes-model:jar:1.0.45:compile
[INFO] |  |  |  \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.7.4:compile
[INFO] |  |  +- com.squareup.okhttp:okhttp:jar:2.7.2:compile
[INFO] |  |  |  \- com.squareup.okio:okio:jar:1.6.0:compile
[INFO] |  |  +- com.squareup.okhttp:logging-interceptor:jar:2.7.2:compile
[INFO] |  |  +- com.squareup.okhttp:okhttp-ws:jar:2.7.2:compile
[INFO] |  |  +- org.slf4j:jul-to-slf4j:jar:1.7.21:compile
[INFO] |  |  +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.7.4:compile
[INFO] |  |  |  \- org.yaml:snakeyaml:jar:1.15:compile
[INFO] |  |  \- com.github.mifmif:generex:jar:0.0.4:compile
[INFO] |  |     \- dk.brics.automaton:automaton:jar:1.11-8:compile
[INFO] |  \- io.fabric8:openshift-client:jar:1.3.90:compile
[INFO] +- org.apache.camel:camel-netty4-http:jar:2.18-SNAPSHOT:compile
[INFO] |  \- org.apache.camel:camel-netty4:jar:2.18-SNAPSHOT:compile
[INFO] |     +- io.netty:netty-all:jar:4.0.36.Final:compile
[INFO] |     \- commons-pool:commons-pool:jar:1.6:compile
[INFO] +- javax.enterprise:cdi-api:jar:1.2:provided
[INFO] |  +- javax.el:javax.el-api:jar:2.2.5:compile
[INFO] |  +- javax.interceptor:javax.interceptor-api:jar:1.2:compile
[INFO] |  \- javax.inject:javax.inject:jar:1:compile
[INFO] +- org.jboss.weld.se:weld-se:jar:2.3.3.Final:compile
[INFO] +- org.jboss.weld:weld-core:jar:2.3.3.Final:compile
[INFO] |  +- org.jboss.weld:weld-api:jar:2.3.SP2:compile
[INFO] |  +- org.jboss.weld:weld-spi:jar:2.3.SP2:compile
[INFO] |  +- org.jboss.classfilewriter:jboss-classfilewriter:jar:1.1.2.Final:compile
[INFO] |  +- org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final:compile
[INFO] |  +- com.google.guava:guava:jar:19.0:compile
[INFO] |  +- org.jboss.spec.javax.el:jboss-el-api_3.0_spec:jar:1.0.0.Alpha1:compile
[INFO] |  +- org.jboss.spec.javax.interceptor:jboss-interceptors-api_1.2_spec:jar:1.0.0.Final:compile
[INFO] |  \- org.jboss.logging:jboss-logging:jar:3.2.1.Final:compile
[INFO] +- org.apache.deltaspike.cdictrl:deltaspike-cdictrl-weld:jar:1.5.4:compile
[INFO] |  \- org.apache.deltaspike.cdictrl:deltaspike-cdictrl-api:jar:1.5.4:compile
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.21:compile
[INFO] +- log4j:log4j:jar:1.2.17:compile
[INFO] +- junit:junit:jar:4.12:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.jboss.arquillian.junit:arquillian-junit-container:jar:1.1.11.Final:test
[INFO] |  +- org.jboss.arquillian.junit:arquillian-junit-core:jar:1.1.11.Final:compile
[INFO] |  +- org.jboss.arquillian.test:arquillian-test-api:jar:1.1.11.Final:compile
[INFO] |  |  \- org.jboss.arquillian.core:arquillian-core-api:jar:1.1.11.Final:compile
[INFO] |  +- org.jboss.arquillian.test:arquillian-test-spi:jar:1.1.11.Final:compile
[INFO] |  |  \- org.jboss.arquillian.core:arquillian-core-spi:jar:1.1.11.Final:compile
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-test-api:jar:1.1.11.Final:compile
[INFO] |  |  \- org.jboss.shrinkwrap:shrinkwrap-api:jar:1.2.3:compile
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-test-spi:jar:1.1.11.Final:compile
[INFO] |  +- org.jboss.arquillian.core:arquillian-core-impl-base:jar:1.1.11.Final:compile
[INFO] |  +- org.jboss.arquillian.test:arquillian-test-impl-base:jar:1.1.11.Final:compile
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-impl-base:jar:1.1.11.Final:compile
[INFO] |  |  +- org.jboss.arquillian.config:arquillian-config-api:jar:1.1.11.Final:compile
[INFO] |  |  +- org.jboss.arquillian.config:arquillian-config-impl-base:jar:1.1.11.Final:compile
[INFO] |  |  \- org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-spi:jar:2.0.0-alpha-8:compile
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-test-impl-base:jar:1.1.11.Final:compile
[INFO] |  \- org.jboss.shrinkwrap:shrinkwrap-impl-base:jar:1.2.3:compile
[INFO] |     \- org.jboss.shrinkwrap:shrinkwrap-spi:jar:1.2.3:compile
[INFO] +- io.fabric8:fabric8-arquillian:jar:2.2.114:test
[INFO] |  +- io.fabric8:fabric8-annotations:jar:2.2.114:compile
[INFO] |  +- io.fabric8:kubernetes-api:jar:2.2.114:compile
[INFO] |  |  +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] |  |  +- org.json:json:jar:20160212:compile
[INFO] |  |  \- dnsjava:dnsjava:jar:2.1.7:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.7.4:compile
[INFO] |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.7.4:compile
[INFO] |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.7.4:compile
[INFO] |  +- io.fabric8:kubernetes-assertions:jar:2.2.114:test
[INFO] |  |  \- org.assertj:assertj-core:jar:2.4.1:compile
[INFO] |  +- io.fabric8:jolokia-assertions:jar:2.2.114:compile
[INFO] |  |  +- org.jolokia:jolokia-client-java:jar:1.3.3:compile
[INFO] |  |  |  +- com.googlecode.json-simple:json-simple:jar:1.1.1:compile
[INFO] |  |  |  \- org.apache.httpcomponents:httpclient-osgi:jar:4.3.3:compile
[INFO] |  |  |     \- commons-codec:commons-codec:jar:1.10:compile
[INFO] |  |  \- commons-logging:commons-logging:jar:1.2:compile
[INFO] |  +- io.fabric8:kubernetes-jolokia:jar:2.2.114:compile
[INFO] |  +- io.fabric8:fabric8-utils:jar:2.2.114:compile
[INFO] |  +- io.fabric8:fabric8-devops:jar:2.2.114:compile
[INFO] |  +- org.ops4j.pax.url:pax-url-aether:jar:2.4.6:compile
[INFO] |  |  \- org.slf4j:jcl-over-slf4j:jar:1.6.6:compile
[INFO] |  +- org.fusesource.jansi:jansi:jar:1.11:test
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-spi:jar:1.1.11.Final:compile
[INFO] |  |  \- org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-api-base:jar:2.0.0-alpha-8:compile
[INFO] |  +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-depchain:pom:2.2.2:compile
[INFO] |  |  +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-api:jar:2.2.2:compile
[INFO] |  |  +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-spi:jar:2.2.2:compile
[INFO] |  |  +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-api-maven-archive:jar:2.2.2:compile
[INFO] |  |  \- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven-archive:jar:2.2.2:compile
[INFO] |  |     +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-spi-maven-archive:jar:2.2.2:compile
[INFO] |  |     +- org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.0.M1:compile
[INFO] |  |     |  \- org.eclipse.sisu:org.eclipse.sisu.inject:jar:0.3.0.M1:compile
[INFO] |  |     \- org.codehaus.plexus:plexus-compiler-javac:jar:2.3:compile
[INFO] |  |        \- org.codehaus.plexus:plexus-compiler-api:jar:2.3:compile
[INFO] |  +- org.codehaus.plexus:plexus-utils:jar:3.0.22:compile
[INFO] |  \- xml-apis:xml-apis:jar:1.4.01:compile
[INFO] \- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven:jar:2.2.2:test
[INFO]    +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-api-maven:jar:2.2.2:compile
[INFO]    +- org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-spi-maven:jar:2.2.2:compile
[INFO]    +- org.eclipse.aether:aether-api:jar:1.0.0.v20140518:test
[INFO]    +- org.eclipse.aether:aether-impl:jar:1.0.0.v20140518:test
[INFO]    +- org.eclipse.aether:aether-spi:jar:1.0.0.v20140518:test
[INFO]    +- org.eclipse.aether:aether-util:jar:1.0.0.v20140518:test
[INFO]    +- org.eclipse.aether:aether-connector-basic:jar:1.0.0.v20140518:test
[INFO]    +- org.eclipse.aether:aether-transport-wagon:jar:1.0.0.v20140518:test
[INFO]    +- org.apache.maven:maven-aether-provider:jar:3.2.5:test
[INFO]    +- org.apache.maven:maven-model:jar:3.2.5:test
[INFO]    +- org.apache.maven:maven-model-builder:jar:3.2.5:test
[INFO]    |  \- org.codehaus.plexus:plexus-component-annotations:jar:1.5.5:compile
[INFO]    +- org.apache.maven:maven-repository-metadata:jar:3.2.5:test
[INFO]    +- org.apache.maven:maven-settings:jar:3.2.5:test
[INFO]    +- org.apache.maven:maven-settings-builder:jar:3.2.5:test
[INFO]    +- org.codehaus.plexus:plexus-interpolation:jar:1.21:test
[INFO]    +- org.sonatype.plexus:plexus-sec-dispatcher:jar:1.3:test
[INFO]    |  \- org.sonatype.plexus:plexus-cipher:jar:1.4:test
[INFO]    +- org.apache.maven.wagon:wagon-provider-api:jar:2.6:test
[INFO]    +- org.apache.maven.wagon:wagon-file:jar:2.6:test
[INFO]    |  \- commons-lang:commons-lang:jar:2.6:test
[INFO]    \- org.apache.maven.wagon:wagon-http-lightweight:jar:2.6:test
[INFO]       \- org.apache.maven.wagon:wagon-http-shared:jar:2.6:test
[INFO]          +- org.jsoup:jsoup:jar:1.7.2:test
[INFO]          \- commons-io:commons-io:jar:2.4:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Notice how jackson-core is not in the kubernetes-client tree in the top, but in the arquillian tree

[INFO] +- io.fabric8:fabric8-arquillian:jar:2.2.114:test

that has test scope. This can lead to problems.

For example the hawt-app plugin and whatnot that builds a classpath tree based on such a dependency tree will skip all test scoped parts of the tree.

rhuss commented 8 years ago

Yes, afair hawt-app only includes compile time dependencies, which imo makes sense so that no test-dependencies end up in the final artifact. Wouldn't it make sense to add jackson as a direct dependency to kubernetes-client ?

rhuss commented 8 years ago

ehm, didnt read the issue title ;-)

jimmidyson commented 8 years ago

What a huge dependency tree - fixed in #406