Hi,
I am trying to get HikariCP bundled with my mod as a one fat jar. But there is a problem where HikariCP causes reobfJar to fail with InvalidArgumentException, and I'm not sure why.
Here is my gradle code right now (I left out a lot of stuff which I don't think matters):
configurations {
embed
}
dependencies {
minecraft 'net.minecraftforge:forge:1.16.5-36.1.0'
embed group: 'com.zaxxer', name: 'HikariCP', version: '4.0.3'
compileOnly group: 'com.ea.async', name: 'ea-async', version: '1.2.3'
}
jar {
from configurations.embed.collect{ it.isDirectory() ? it : zipTree(it) }
manifest {
attributes([
"Specification-Title": "examplemod",
"Specification-Vendor": "examplemodsareus",
"Specification-Version": "1", // We are version 1 of ourselves
"Implementation-Title": project.name,
"Implementation-Version": "${version}",
"Implementation-Vendor" :"examplemodsareus",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}
jar.finalizedBy('reobfJar')
As I understand, this is the current order of events:
`jar` task to run, which will bundle all the dependencies marked with `embed`, which will create the fat jar
`reobfJar` will run on that fat jar.
Would I would like to do instead is this order of events:
`jar` task to run, but no fat jar is created at this time.
`reobfJar` will run on the output of `jar`.
A new task runs, which will take the output of `reobfJar` and combine it with the dependencies marked with `embed` to create the one fat jar
I think the code would look something like this:
jar {
manifest {
attributes([
"Specification-Title": "examplemod",
"Specification-Vendor": "examplemodsareus",
"Specification-Version": "1", // We are version 1 of ourselves
"Implementation-Title": project.name,
"Implementation-Version": "${version}",
"Implementation-Vendor" :"examplemodsareus",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}
jar.finalizedBy('reobfJar')
task bundle(type: Jar) {
manifest {
attributes 'Main-Class': 'com.gluecode.fpvdrone.server.Main'
}
from "build/libs/modid-1.0.jar"
from configurations.embed.collect{ it.isDirectory() ? it : zipTree(it) }
}
The problems I have with the above is:
I have to run `./gradlew bundle` after running `./gradlew buildNeeded`. And I'd like to just run 1 command.
It doesn't work because it results in an invalid mod jar.
I'm am still learning gradle. Can anyone help me?