// Do it this way so people with older Gradle can hopefully still build. buildscript { repositories { jcenter() maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3' } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'maven' group = 'cuchaz' version = '0.11.0' def ENV = System.getenv() if (ENV.BUILD_NUMBER) { version = version + "." + "${System.getenv().BUILD_NUMBER}" } sourceCompatibility = 1.8 targetCompatibility = 1.8 // Custom source layout sourceSets { main { java { srcDir 'src/main/java' } resources { srcDir 'conf' } } test { java { srcDir 'src/test/java' } resources { srcDir 'test' } } } repositories { mavenLocal() mavenCentral() maven { name "Cuchaz Custom Repository" url 'http://maven.cuchazinteractive.com' } maven { name "RX14 Repository" url 'http://mvn.rx14.co.uk/local/' } } configurations { proGuard // used to download ProGuard application // used for JSyntaxPane so it's not in the library POM compile.extendsFrom application } dependencies { compile 'com.google.guava:guava:17.+' compile 'org.javassist:javassist:3.+' compile 'org.bitbucket.mstrobel:procyon-compilertools:0.5.33.8-enigma' application 'de.sciss:syntaxpane:1.1.+' testCompile 'junit:junit:4.+' testCompile 'org.hamcrest:hamcrest-all:1.+' proGuard 'net.sf.proguard:proguard-base:5.+' } // For each set of test inputs, create an output jar and obfuscate it. file('src/test/java/cuchaz/enigma/inputs').listFiles().each { theFile -> if (theFile.directory) { task("${theFile.name}TestJar", type: Jar, dependsOn: testClasses) { from('build/classes/test') { include "cuchaz/enigma/inputs/$theFile.name/**/*.class" include 'cuchaz/enigma/inputs/Keep.class' } archiveName = theFile.name + '.jar' destinationDir = file('build/test-inputs') } task("${theFile.name}TestObf", type: JavaExec, dependsOn: "${theFile.name}TestJar") { main 'proguard.ProGuard' classpath configurations.proGuard args '@proguard-test.conf', '-injars', file('build/test-inputs/' + "${theFile.name}.jar"), '-outjars', file('build/test-obf/' + "${theFile.name}.jar") } test.dependsOn "${theFile.name}TestObf" } } // We also semi-deobfuscate translation.jar to then test it... yeah... oh well. task('deobfTranslationInput', type: JavaExec, dependsOn: 'translationTestObf') { classpath sourceSets.main.runtimeClasspath main 'cuchaz.enigma.CommandMain' args 'deobfuscate', file('build/test-obf/translation.jar'), file('build/test-deobf/translation.jar') } test.dependsOn 'deobfTranslationInput' test { // Since the Minecraft test is really long (like 10 minutes D:) we turn it // off by default. if (!System.getProperty('enableExtremelySlowMinecraftTest', '') .equalsIgnoreCase('true')) { exclude 'cuchaz/enigma/TestSourceIndex.class' } // Allow people to specify a custom path to their Minecraft directory. // (Example: `gradle build -Denigma.test.minecraftdir=./`) systemProperties = [ 'enigma.test.minecraftdir': System.getProperty('test.minecraftdir') ] } // Set the main class. jar.manifest.attributes 'Main-Class': 'cuchaz.enigma.Main' // Make the "fat" application jar. This is useful to just throw in a classpath // for tests, though it includes some slightly useless stuff. shadowJar { append 'license.LGPL3.txt' append 'license.APL2.txt' append 'readme.txt' exclude 'META-INF/maven/**' } // Create a library jar, containing only the deobfuscation code, for use at // runtime. This will be deployed to Maven Local with a POM, and can be uploaded // to a remote server manually (for now anyway). task('libJar', type: Jar, dependsOn: classes) { classifier = 'lib' from("$buildDir/classes/main") { exclude 'cuchaz/enigma/gui/**' exclude 'cuchaz/enigma/convert/**' // Main classes + inner classes (keep CommandMain) exclude 'cuchaz/enigma/Main.class' exclude 'cuchaz/enigma/Main.class' exclude 'cuchaz/enigma/ConvertMain*.class' } } artifacts { archives shadowJar archives libJar } // And finally, make the build generate / install the jars. build.dependsOn install apply from: 'https://github.com/FabricMC/fabric-docs/raw/master/gradle/maven.gradle'