Jackson-databind NoClassDefFound even though it is in the jar

Hello,

I’m trying to adapt a plugin to sponge but am running into problems with one of my shaded dependencies not loading. Would anyone know a way around this? Here is my pom.xml:

  <version>1.4.0</version>
  <packaging>jar</packaging>

  <profiles>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
              <finalName>${project.name}</finalName>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http</artifactId>
        <version>2.6</version>
      </extension>
    </extensions>

    <finalName>${project.artifactId}</finalName>
    <defaultGoal>clean install</defaultGoal>
    <resources>
      <resource>
        <targetPath>.</targetPath>
        <filtering>true</filtering>
        <directory>${basedir}/src/main/resources</directory>
        <includes>
          <include>*.yml</include>
        </includes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <downloadSources>true</downloadSources>
          <downloadJavadocs>false</downloadJavadocs>
        </configuration>
      </plugin>

      <!-- Set a compiler level -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>

      <!-- Maven Shade Plugin -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <!-- Run shade goal on package phase -->
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
              <transformers>
                <!-- add Main-Class to manifest file -->
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>io.nyaruko.dal.base.DataAccessLayer</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.4</version>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-webdav-jackrabbit</artifactId>
            <version>2.6</version>
          </dependency>
        </dependencies>
    </plugin>
    </plugins>
  </build>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <repositories>
    <repository>
      <id>spigot-repo</id>
      <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
    <repository>
        <id>sonatype-snapshots</id>
        <url>http://oss.sonatype.org/content/repositories/snapshots/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>sponge-repo</id>
        <url>https://repo.spongepowered.org/maven</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>org.spigotmc</groupId>
      <artifactId>spigot-api</artifactId>
      <version>1.12.1-R0.1-SNAPSHOT</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.bukkit</groupId>
      <artifactId>bukkit</artifactId>
      <version>1.12.1-R0.1-SNAPSHOT</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>okhttp</artifactId>
      <version>3.13.1</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.8</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.rabbitmq</groupId>
      <artifactId>amqp-client</artifactId>
      <version>4.0.2</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.9.2</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.ehcache</groupId>
      <artifactId>ehcache</artifactId>
      <version>3.3.0</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>javax.cache</groupId>
      <artifactId>cache-api</artifactId>
      <version>1.0.0</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>net.md-5</groupId>
      <artifactId>bungeecord-api</artifactId>
      <version>1.12-SNAPSHOT</version>
      <type>jar</type>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.5</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>com.github.jedis-lock</groupId>
      <artifactId>jedis-lock</artifactId>
      <version>1.0.1</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>com.microsoft.aspnet</groupId>
      <artifactId>signalr</artifactId>
      <version>0.1.0-preview2-35174</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>io.reactivex.rxjava2</groupId>
      <artifactId>rxjava</artifactId>
      <version>2.2.2</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.influxdb</groupId>
        <artifactId>influxdb-java</artifactId>
        <version>2.15</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>mongodb-driver-async</artifactId>
      <version>3.8.2</version>
    </dependency>

    <dependency>
      <groupId>org.spongepowered</groupId>
      <artifactId>spongeapi</artifactId>
      <version>7.1.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.6</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>

And the error:

  Exception:
    java.lang.NoClassDefFoundError:
    com/fasterxml/jackson/databind/Objec
    Mapper
    io.nyaruko.dal.common.ModelUtils.errorCheck(ModelUtils.java:22)
    io.nyaruko.dal.models.base.BaseModel.getFromURL(BaseModel.java:135)   
    io.nyaruko.dal.models.GlobalVariable.getByName(GlobalVariable.java:22)
    io.nyaruko.dal.base.DataAccessLayer.getRabbitMQConnection(DataAccessLayer.java:59)
    io.nyaruko.dal.managers.RabbitManager.<init>(RabbitManager.java:23)   
    io.nyaruko.dal.managers.RabbitManager.getInstance(RabbitManager.java:47)    
    io.nyaruko.dal.managers.CacheRabbitManager.getChannel(CacheRabbitManager.java:44) 
    io.nyaruko.dal.managers.CacheRabbitManager.startQueueConsumer(CacheRabbitManager.java:24)
    io.nyaruko.dal.managers.CacheManager.<init>(CacheManager.java:53)
    io.nyaruko.dal.managers.CacheManager.getInstance(CacheManager.java:106)
    io.nyaruko.dal.base.DataAccessLayer.<init>(DataAccessLayer.java:47)   
    io.nyaruko.dal.sponge.DataAccessLayer.onStart(DataAccessLayer.java:30)
    org.spongepowered.common.event.listener.GameConstructionEventListener_DataAccessLayer_onStart3.handle(Unknown Source)
    org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:95)  
    org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:381)
    org.spongepowered.mod.event.SpongeModEventManager.extendedPost(SpongeModEventManager.java:454)    
    org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:415)
    org.spongepowered.common.SpongeImpl.postEvent(SpongeImpl.java:259) 
    net.minecraftforge.fml.common.LoadController.redirect$zza000$forgeImpl$PostEvent(LoadController.java:570)
    net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136)
    net.minecraftforge.fml.common.Loader.loadMods(Loader.java:595)
    net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:98) 
    net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333)
    net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125) 
    net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486) 
    java.lang.Thread.run(Thread.java:748)
    java.lang.ClassNotFoundException:   
    com.fasterxml.jackson.databind.Objec
    Mapper
    net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:101)   
    java.lang.ClassLoader.loadClass(ClassLoader.java:419) 
    java.lang.ClassLoader.loadClass(ClassLoader.java:352) 
    io.nyaruko.dal.common.ModelUtils.errorCheck(ModelUtils.java:22)
    io.nyaruko.dal.models.base.BaseModel.getFromURL(BaseModel.java:135)   
    io.nyaruko.dal.models.GlobalVariable.getByName(GlobalVariable.java:22)
    io.nyaruko.dal.base.DataAccessLayer.getRabbitMQConnection(DataAccessLayer.java:59)
    io.nyaruko.dal.managers.RabbitManager.<init>(RabbitManager.java:23)   
    io.nyaruko.dal.managers.RabbitManager.getInstance(RabbitManager.java:47)    
    io.nyaruko.dal.managers.CacheRabbitManager.getChannel(CacheRabbitManager.java:44) 
    io.nyaruko.dal.managers.CacheRabbitManager.startQueueConsumer(CacheRabbitManager.java:24)
    io.nyaruko.dal.managers.CacheManager.<init>(CacheManager.java:53)
    io.nyaruko.dal.managers.CacheManager.getInstance(CacheManager.java:106)
    io.nyaruko.dal.base.DataAccessLayer.<init>(DataAccessLayer.java:47)   
    io.nyaruko.dal.sponge.DataAccessLayer.onStart(DataAccessLayer.java:30)
    org.spongepowered.common.event.listener.GameConstructionEventListener_DataAccessLayer_onStart3.handle(Unknown Source)
    org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:95)  
    org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:381)
    org.spongepowered.mod.event.SpongeModEventManager.extendedPost(SpongeModEventManager.java:454)    
    org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:415)
    org.spongepowered.common.SpongeImpl.postEvent(SpongeImpl.java:259) 
    net.minecraftforge.fml.common.LoadController.redirect$zza000$forgeImpl$PostEvent(LoadController.java:570)
    net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136)
    net.minecraftforge.fml.common.Loader.loadMods(Loader.java:595)
    net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:98) 
    net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333)
    net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125) 
    net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486) 
    java.lang.Thread.run(Thread.java:748)

And the jar presence evidence:

Hey!

I had this exact problem a couple of weeks ago. For some reason you need to relocate jackson in the shade plugin:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.2</version>
            <configuration>
                <relocations>
                    <relocation>
                        <pattern>com.fasterxml.jackson</pattern>
                        <shadedPattern>net.yourPackage.internal.jackson</shadedPattern>
                    </relocation>
                </relocations>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>