import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact
import org.gradle.api.internal.java.JavaLibrary
import org.ultramine.gradle.task.ReobfTask
import org.ultramine.gradle.task.SideSplitTask
import org.ultramine.gradle.task.SpeicialClassTransformTask
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'eclipse'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
compileJava.options.encoding = 'UTF-8'
group = project_group
version = (concat_mc_version_to=='version' ? (minecraft_version+'-') : '') + computeVersion()
repositories {
maven {
name 'forge'
url 'http://files.minecraftforge.net/maven'
}
mavenCentral()
maven {
name 'sonatypeSnapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
maven {
name 'minecraft'
url 'https://libraries.minecraft.net/'
}
maven {
name 'ultramine'
url 'http://maven.ultramine.ru/'
}
maven { url 'http://maven.sk89q.com/repo/' }
}
configurations {
compileCommon
compileClient
compileServer
compile.extendsFrom compileCommon, compileClient, compileServer
runtimeCommon
runtimeClient.extendsFrom runtimeCommon, compileCommon, compileClient
runtimeServer.extendsFrom runtimeCommon, compileCommon, compileServer
runtimeAll.extendsFrom runtimeCommon, compileCommon, compileClient, compileServer
runtime.setExtendsFrom([runtimeAll])
//runtimeClient & runtimeServer is not linking to IDE and must not be used for adding dependencies
}
dependencies {
// compileCommon 'org.ultramine.core:ultramine_core-1.7.10:0.1.0-beta.11'
compile 'org.ultramine.core:ultramine_core-1.7.10:0.2.0-indev'
testCompile 'org.codehaus.groovy:groovy-all:2.4.3'
testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
testCompile 'junit:junit:4.5'
}
task injectVersion(type: SpeicialClassTransformTask) {
dependsOn tasks.compileJava
inputDir = tasks.compileJava.destinationDir
// replace {
// replaceIn 'org.ultramine.mods.privreg.PrivateRegions'
// replace '@version@', version
// }
}
task reobf(type: ReobfTask) {
dependsOn tasks.compileJava, tasks.injectVersion
classpath = sourceSets.main.compileClasspath;
srg = 'conf/mcp2srg.srg'
inputDir = tasks.compileJava.destinationDir
overrideInputDir = tasks.injectVersion.outputDir
}
task sidesplit(type: SideSplitTask) {
dependsOn tasks.reobf
inputDir = tasks.reobf.outputDir
}
task processServerResources(type: ProcessResources) {
from sourceSets.main.resources.srcDirs
into new File(buildDir, 'resources_server')
exclude 'assets/minecraft/font'
exclude 'assets/minecraft/shaders'
exclude 'assets/minecraft/texts'
exclude 'assets/minecraft/textures'
exclude 'assets/fml/textures'
}
task processClientResources(type: ProcessResources) {
from sourceSets.main.resources.srcDirs
into new File(buildDir, 'resources_client')
exclude 'org/ultramine/defaults'
}
task jar_server(type: Jar) {
dependsOn(tasks.sidesplit, tasks.processServerResources)
from fileTree(tasks.sidesplit.getServerClasses()), tasks.processServerResources
classifier = 'server'
}
task jar_client(type: Jar) {
dependsOn(tasks.sidesplit, tasks.processClientResources)
from fileTree(tasks.sidesplit.getClientClasses()), tasks.processClientResources
classifier = 'client'
}
task jar_universal(type: Jar) {
dependsOn(tasks.reobf, tasks.processResources)
from tasks.reobf.getOutputDir(), tasks.processResources
classifier = 'universal'
}
jar {
classifier = 'dev'
}
task jar_source(type: Jar) {
from sourceSets.main.allSource
classifier = 'sources'
}
artifacts {
if(produce_universal_jar == 'true') archives jar_universal
if(produce_server_jar == 'true') archives jar_server
if(produce_client_jar == 'true') archives jar_client
}
publishing {
publications {
if(publish_jars.contains('dev'))
mavenDevJar(MavenPublication) {
from new JavaLibrary(new ArchivePublishArtifact(tasks.jar), configurations.runtimeCommon.getAllDependencies())
artifacts.matching({it.classifier == "dev"}).all({it.classifier = null})
artifact tasks.jar_source
}
if(publish_jars.contains('universal'))
mavenUnivarsalJar(MavenPublication) {
from new JavaLibrary(new ArchivePublishArtifact(tasks.jar_universal), configurations.runtimeAll.getAllDependencies())
artifacts.matching({it.classifier == "universal"}).all({it.classifier = null})
artifactId = project.name + '-universal'
}
if(publish_jars.contains('server'))
mavenServerJar(MavenPublication) {
from new JavaLibrary(new ArchivePublishArtifact(tasks.jar_server), configurations.runtimeServer.getAllDependencies())
artifacts.matching({it.classifier == "server"}).all({it.classifier = null})
artifactId = project.name + '-server'
}
if(publish_jars.contains('client'))
mavenClientJar(MavenPublication) {
from new JavaLibrary(new ArchivePublishArtifact(tasks.jar_client), configurations.runtimeClient.getAllDependencies())
artifacts.matching({it.classifier == "client"}).all({it.classifier = null})
artifactId = project.name + '-client'
}
}
repositories {
if(project.hasProperty('publish_url') && !publish_url.isEmpty())
maven {
url publish_url
}
}
}
task dumpLibs(type: Copy) {
into "$buildDir/libs/libraries"
from configurations.runtime
}
String getGitDesc() {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'describe', '--tags', '--long'
standardOutput = stdout
errorOutput = stdout
}.rethrowFailure().assertNormalExitValue()
return stdout.toString().trim()
}
String computeVersion() {
if(project.hasProperty('override_version'))
return override_version
String mmversion; // major.minor
String commit;
try {
String[] parts = getGitDesc().split('-')
if(parts.length != 3) throw new GradleException('no git tags found')
if(!parts[0].startsWith('v')) throw new GradleException('last git tag is not a version')
mmversion = parts[0].substring(1) //removing 'v'
commit = parts[2].substring(1) //removing 'g'
} catch (Exception e) {
if(release_type != 'indev') throw e
return 'indev'
}
if(release_type != 'stable') {
int ind = mmversion.lastIndexOf('.')
mmversion = mmversion.substring(0, ind+1) + ((mmversion.substring(ind+1) as int) + 1) + '.0-' + release_type
}
int revision = 0;
if(project.hasProperty('override_revision')) {
revision = override_revision as int
} else if(release_type != 'indev' || project.hasProperty('increment_revision')) {
File verfile = file("$buildDir/versions/$mmversion")
String filetext;
if(verfile.exists() && !(filetext = verfile.getText().trim()).isEmpty()) {
String[] fileparts = filetext.split(':')
if(fileparts.length != 2) throw new GradleException('Version file is corrupted: ' + verfile.getAbsolutePath())
revision = fileparts[1] as int;
if(!commit.equals(fileparts[0]) || project.hasProperty('increment_revision')) {
revision++;
verfile.write(commit+':'+revision)
}
} else {
verfile.getParentFile().mkdirs()
verfile.write(commit+':0')
}
}
return (revision > 0 || release_type == 'stable') ? (mmversion+'.'+revision) : mmversion;
}