I have a problem while trying to make a fat jar of my java application. The application runs normally while using IntelliJ, and no errors are presented for its operation.
The error:
Task :uberJar FAILED
FAILURE: Build failed with an exception.
Entry com/netflix/server/context/BiDirectional.class is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.0/dsl/org.gradle.api.file.CopySpec.html#org.gradle.api.file.CopySpec:duplicatesStrategy for details.
Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 1s 3 actionable tasks: 3
My build.gradle:
plugins {
id 'java'
}
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
implementation 'io.netty:netty-all:4.1.66.Final',
'io.reactivex.rxjava3:rxjava:3.1.0',
'io.reactivex:rxnetty:0.4.20',
'io.reactivex:rxjava:1.3.8',
'io.reactivex:rxnetty:0.5.1',
'io.netty:netty-codec-http:4.1.66.Final',
'org.glassfish.jersey.core:jersey-server:2.7',
'org.glassfish.jersey.containers:jersey-container-servlet-core:2.7',
'org.glassfish.jersey.containers:jersey-container-jetty-http:2.7',
'org.springframework:spring-core:5.3.8',
'org.springframework:spring-context:5.3.8',
'org.springframework:spring-beans:5.3.8',
'org.springframework:spring-test:5.3.8',
'com.netflix.karyon:karyon-governator:2.1.00-RC6',
'com.netflix.karyon:karyon2-core:2.2.0-rc.2',
'org.slf4j:slf4j-simple:1.7.0',
'org.slf4j:slf4j-simple:1.7.0',
'commons-io:commons-io:2.4'
}
task uberJar(type: Jar){
archiveClassifier = 'uber'
from sourceSets.main.output
dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.findAll { it.name.endsWith('jar') } .collect { zipTree(it) }
}
manifest.attributes(['Main-Class': '**the package omitted for security**.Main'])
}
My expectation is to create a valid fat jar file...
gradle version: 7.0 JdK: 1.8
Modify your build.gradle
and set a duplicates strategy. This will include the mentioned file in the jar.
task uberJar(type: Jar){
archiveClassifier = 'uber'
duplicatesStrategy = 'include' // <<---- addition
from sourceSets.main.output
dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.findAll { it.name.endsWith('jar') } .collect { zipTree(it) }
}
manifest.attributes(['Main-Class': '**the package omitted for security**.Main'])
}
JavaDoc: https://docs.gradle.org/current/javadoc/org/gradle/api/file/DuplicatesStrategy.html