Open lockieluke opened 12 months ago
Well you have to export the jar dependencies outside the project jar on a separate folder. Same way i do it with XR3Player. I had this issue too. The jar dependencies can't be in the main jar file of the project for some weird reason.
So
1)Project Jar 2) MyProjectDependencies ( folder) => all jar dependencies here
It is possible just Google it a bit. I only know how to do it with Maven. Check my XR3Player repository
all of them JARs have to be external?
Yes exactly there will be one main jar which has the application code and also will be a folder that contains all your project dependencies as jars.
Just copy paste my text and ask chatgpt ☺. It's easy to do it.
I tried so many things still doesn't work
@omegaui i think you came across the same issue 2 years ago, may i ask how did you manage to sort that out?
@lockieluke I remember being able to fix this, Let me check that project It's been so long since I coded in Java
Thanks take your time 🙏
@lockieluke So, there's an IDE I wrote, which has a plugin called Vibe n Code This plugin's sole purpose was to play music right in the IDE.
I was able to compile the plugin into self-contained jar with the required libraries. But I don't remember how I did it that time .... sorry about that.
But here's that self-contained jar file, if this could help.
Also, in one of the its trailer videos, I could see, the plugin playing a wav file.
Do you not have the source code
Both of them
Guys check the XR3Player of mine repository i have done it for you with Maven instead of Gradle. It's the same logic.
Good News, I did it! All of the stream-player related dependencies have to be exported to a folder outside the JAR
In this case, I created a new dependency keyword externalImplementation
, the build script would pick that up and export the dependencies to a folder next to the jar named "dependencies". The biuld script will then add the relative path to the deps folder to the classpath, you can verify this by checking System.getProperty("java.class.path")
.
The thing I'm making is a Minecraft mod so when you install the mod you'll have to copy the "dependencies" folder next to the jar file too which is not the most seamless solution but it works, and there we go. Please consider keeping this issue open, it would help so many people.
plugins {
id 'fabric-loom' version '1.4-SNAPSHOT'
id 'maven-publish'
id "org.jetbrains.kotlin.jvm" version "1.9.21"
id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.21'
id 'com.github.johnrengelman.shadow' version '8.1.1'
}
version = project.mod_version
group = project.maven_group
base {
archivesName = project.archives_base_name
}
configurations {
externalImplementation
}
repositories {
// Add repositories to retrieve artifacts from in here.
// You should only use this when depending on other mods because
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
mavenCentral()
maven {
name = "jitpack"
url = "https://jitpack.io/"
}
}
loom {
splitEnvironmentSourceSets()
mods {
"coopersmpwinterclient" {
sourceSet sourceSets.main
sourceSet sourceSets.client
}
}
}
dependencies {
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
modImplementation "net.fabricmc:fabric-language-kotlin:${project.fabric_kotlin_version}"
modImplementation "com.ptsmods:devlogin:3.4.1"
// java-stream-player and its dependencies
implementation externalImplementation("com.github.goxr3plus:java-stream-player:10.0.2")
include implementation("com.github.goxr3plus:jaudiotagger:2.2.7")
include implementation("com.mpatric:mp3agic:0.9.1")
include implementation('com.googlecode.soundlibs:mp3spi:1.9.5-1') {
exclude group: 'com.googlecode.soundlibs', module: 'tritonus-share'
}
include implementation('org.jflac:jflac-codec:1.5.2')
include implementation('com.github.trilarion:vorbis-support:1.1.0')
include implementation('com.googlecode.soundlibs:tritonus-all:0.3.7.2') {
exclude group: 'com.googlecode.soundlibs', module: 'tritonus-share'
}
// Uncomment the following line to enable the deprecated Fabric API modules.
// These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time.
// modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}"
}
processResources {
inputs.property "version", project.version
filesMatching("fabric.mod.json") {
expand "version": project.version
}
}
tasks.withType(JavaCompile).configureEach {
it.options.release = 17
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = 17
}
}
java {
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this line, sources will not be generated.
withSourcesJar()
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
remapJar {
addNestedDependencies = true
}
// MAGIC STARTS HERE
def dependsDir = "build/libs/dependencies"
tasks.register("copyDependencies", Copy) {
configurations.externalImplementation.canBeResolved = true
from configurations.externalImplementation
into "$dependsDir"
}
remapJar.dependsOn(tasks.named("copyDependencies"))
jar {
from("LICENSE") {
rename { "${it}_${project.base.archivesName.get()}" }
}
manifest {
attributes("Class-Path": configurations.externalImplementation.collect { "dependencies/${it.getName()}" }.join(' '))
}
}
// configure the maven publication
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
repositories {
// Add repositories to publish to here.
// Notice: This block does NOT have the same function as the block in the top level.
// The repositories here will be used for publishing your artifact, not for
// retrieving dependencies.
}
}
include
is a fabric api keyword, normally you would have to use shadowJar to bundle dependencies
I'm trying to use
java-stream-player
in a Minecraft fabric mod, everything works in dev environment but MP3 playback just does not work when the mod is exported to a normal JAR file and then added to a normal Minecraft Fabric instance.It would simply says: