apply plugin: 'application' java.sourceCompatibility = 8 java.targetCompatibility = 8 if (JavaVersion.current().isJava9Compatible()) { compileJava.options.release.set(8) } mainClassName = 'xyz.prismix.server.ServerLauncher' application.setMainClass(mainClassName) eclipse.project.name = appName + '-server' dependencies { implementation project(':shared') } jar { archiveBaseName.set(appName) // the duplicatesStrategy matters starting in Gradle 7.0; this setting works. duplicatesStrategy(DuplicatesStrategy.EXCLUDE) dependsOn configurations.runtimeClasspath from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } // these "exclude" lines remove some unnecessary duplicate files in the output JAR. exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA') dependencies { exclude('META-INF/INDEX.LIST', 'META-INF/maven/**') } // setting the manifest makes the JAR runnable. manifest { attributes 'Main-Class': project.mainClassName } // this last step may help on some OSes that need extra instruction to make runnable JARs. doLast { file(archiveFile).setExecutable(true, false) } } // Equivalent to the jar task; here for compatibility with gdx-setup. task dist(dependsOn: [jar]) { }