I am building a mod jar. I need an external library to be included in the final jar (org.apache.httpcomponents:httpasyncclient:4.1.5). I am using the Shadow plugin to make the fat jar. However, I cannot get the dependencies to be included properly.
Here is my build.gradle
:
buildscript {
repositories {
jcenter()
maven {
name = "forge"
url = "https://files.minecraftforge.net/maven"
}
}
dependencies {
classpath "net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT"
}
}
plugins {
id "com.github.johnrengelman.shadow" version "4.0.4"
id "java"
}
apply plugin: "net.minecraftforge.gradle.forge"
configurations {
shade
implementation.extendsFrom shade
}
repositories {
jcenter()
}
dependencies {
compile "org.apache.httpcomponents:httpasyncclient:4.1.5"
shade "org.apache.httpcomponents:httpasyncclient:4.1.5"
}
shadowJar {
classifier = ''
configurations = [project.configurations.shade]
finalizedBy 'reobfShadowJar'
}
reobf {
shadowJar {}
}
tasks.build.dependsOn reobfShadowJar
shadowJar.finalizedBy('reobfShadowJar')
compileJava {
sourceCompatibility = targetCompatibility = "1.8"
}
archivesBaseName = "${mod_id}"
version = "${mod_version}"
group = "com.<modid>.<modid>"
minecraft {
version = "1.8.9-11.15.1.2318-1.8.9"
runDir = "run"
replace "@VERSION@", project.version
replaceIn "<Modid>.java"
mappings = "stable_22"
}
processResources {
inputs.property "mod_version", project.version
inputs.property "mc_version", project.minecraft.version
from(sourceSets.main.resources.srcDirs) {
include "mcmod.info"
expand "mod_id":"${mod_id}",
"mod_name":"${mod_name}",
"mod_version":"${mod_version}",
"mod_description":"${mod_description}",
"mc_version":"${mc_version}"
}
from(sourceSets.main.resources.srcDirs) {
exclude "mcmod.info"
}
}
When I run the "Minecraft Client" run configuration in IDEA, everything works as expected. However, when I run gradlew build
, at runtime, I get Error: net.minecraftforge.fml.common.LoaderException: java.lang.NoClassDefFoundError: /org/apache/http/concurrent/FutureCallback
.
Why can't the mod loader find the classes, even though they are in the jar? (I might be doing this completely wrong).