buildscript { repositories { jcenter() } dependencies { classpath 'com.netflix.nebula:gradle-ospackage-plugin:5.3.0' // RPM & DEB support classpath 'edu.sc.seis.gradle:launch4j:2.4.4' } } apply plugin: 'java' apply plugin: 'distribution' apply plugin: 'edu.sc.seis.launch4j' apply plugin: 'nebula.ospackage' // Common configuration // rootProject.version='1.4.3' rootProject.ext.set('jdCoreVersion', '1.0.0') targetCompatibility = '1.8' allprojects { apply plugin: 'eclipse' apply plugin: 'idea' tasks.withType(JavaCompile) { sourceCompatibility = targetCompatibility = '1.8' options.compilerArgs << '-Xlint:deprecation' options.compilerArgs << '-Xlint:unchecked' options.encoding = 'UTF-8' } repositories { mavenCentral() maven { url 'https://raw.github.com/java-decompiler/mvn-repo/master' } } configurations { provided compile.extendsFrom provided } } // 'cleanIdea' task extension // cleanIdea.doFirst { delete project.name + '.iws' delete 'out' followSymlinks = true } // All in one JAR // subprojects.each { subproject -> evaluationDependsOn(subproject.path) } jar { dependsOn subprojects.tasks['jar'] // Add SPI directory def tmpSpiDir = file('build/tmp/spi') from tmpSpiDir // Add dependencies def deps = [] subprojects.each { subproject -> from subproject.sourceSets.main.output.classesDirs from subproject.sourceSets.main.output.resourcesDir deps += subproject.configurations.runtime - subproject.configurations.provided } subprojects.each { subproject -> deps -= subproject.jar.archivePath } deps = deps.unique().collect { it.isDirectory() ? it : zipTree(it) } from deps manifest { attributes 'Main-Class': 'org.jd.gui.App', 'SplashScreen-Image': 'org/jd/gui/images/jd_icon_128.png', 'JD-GUI-Version': project.version, 'JD-Core-Version': project.jdCoreVersion } exclude 'META-INF/licenses/**', 'META-INF/maven/**', 'META-INF/INDEX.LIST' duplicatesStrategy DuplicatesStrategy.EXCLUDE doFirst { // Create SPI directory tmpSpiDir.deleteDir() def tmpSpiServicesDir = file(tmpSpiDir.path + '/META-INF/services') tmpSpiServicesDir.mkdirs() // Copy and merge SPI config files subprojects.each { subproject -> def servicesDir = file(subproject.sourceSets.main.output.resourcesDir.path + '/META-INF/services') if (servicesDir.exists()) { servicesDir.eachFile { serviceFile -> def target = file(tmpSpiServicesDir.path + '/' + serviceFile.name) target << serviceFile.text } } } } } // Java executable wrapper for Windows // launch4j { version = textVersion = project.version fileDescription = productName = 'JD-GUI' errTitle 'JD-GUI Windows Wrapper' copyright 'JD-GUI (C) 2008-2019 Emmanuel Dupuy' icon projectDir.path + '/src/launch4j/resources/images/jd-gui.ico' } // Packages for Linux // ospackage { license = file('LICENSE') maintainer 'Emmanuel Dupuy ' os LINUX packageDescription 'JD-GUI, a standalone graphical utility that displays Java sources from CLASS files' packageGroup 'java' packageName project.name release '0' summary 'A Java Decompiler' url 'https://github.com/java-decompiler/jd-gui' into '/opt/' + project.name from ('build/libs/') { fileMode 0755 } from ('src/linux/resources/') { fileMode 0755 } from 'LICENSE', 'NOTICE', 'README.md' postInstall 'cd /opt/'+ project.name+'; ln -s ./jd-gui-'+project.version+'.jar ./jd-gui.jar; xdg-icon-resource install --size 128 --novendor ./jd_icon_128.png jd-gui; xdg-desktop-menu install ./*.desktop' preUninstall 'cd /opt/'+ project.name+'; rm -f ./jd-gui.jar; rm -fr ./ext; xdg-desktop-menu uninstall ./*.desktop' } // Distributions for OSX and Windows // distributions { osx.contents { into('JD-GUI.app/Contents') { from('src/osx/resources') { include 'Info.plist' expand VERSION: project.version } } into('JD-GUI.app/Contents/MacOS') { from('src/osx/resources') { include 'universalJavaApplicationStub.sh' fileMode 0755 } } into('JD-GUI.app/Contents/Resources/Java') { from jar.archivePath } from 'LICENSE', 'NOTICE', 'README.md' } windows.contents { from 'build/launch4j/jd-gui.exe' from 'LICENSE', 'NOTICE', 'README.md' } } installWindowsDist.dependsOn createExe windowsDistTar.dependsOn createExe windowsDistZip.dependsOn createExe buildDeb.dependsOn jar buildRpm.dependsOn jar build.finalizedBy buildDeb build.finalizedBy buildRpm