408 lines
12 KiB
Groovy
Executable file
408 lines
12 KiB
Groovy
Executable file
// DON'T TOUCH THE BUILDSCRIPT[] BLOCK
|
|
// its special, and it is only there to make ForgeGradle work correctly.
|
|
|
|
buildscript {
|
|
repositories {
|
|
mavenCentral()
|
|
maven {
|
|
name = "forge"
|
|
url = "http://files.minecraftforge.net/maven"
|
|
}
|
|
maven {
|
|
name = "sonatype"
|
|
url = "https://oss.sonatype.org/content/repositories/snapshots/"
|
|
}
|
|
}
|
|
dependencies {
|
|
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
|
|
}
|
|
}
|
|
|
|
apply plugin: 'forge' // adds the forge dependency
|
|
apply plugin: 'maven' // for uploading to a maven repo
|
|
apply plugin: 'checkstyle'
|
|
|
|
version = "7.1.18"
|
|
group= "com.mod-buildcraft"
|
|
archivesBaseName = "buildcraft" // the name that all artifacts will use as a base. artifacts names follow this pattern: [baseName]-[appendix]-[version]-[classifier].[extension]
|
|
|
|
ext.mcModInfo = new groovy.json.JsonSlurper().parse(file("buildcraft_resources/mcmod.info"))
|
|
ext.priv = parseConfig(file('private.properties'))
|
|
|
|
minecraft {
|
|
version = "1.7.10-10.13.4.1614-1.7.10" // McVersion-ForgeVersion this variable is later changed to contain only the MC version, while the apiVersion variable is used for the forge version. Yeah its stupid, and will be changed eentually.
|
|
|
|
runDir = "run" // the directory for ForgeGradle to run Minecraft in
|
|
|
|
// replacing stuff in the source
|
|
replace '@VERSION@', project.version
|
|
replace '@MC_VERSION@', version
|
|
}
|
|
|
|
// configure the source folders
|
|
sourceSets {
|
|
main {
|
|
java {
|
|
srcDir 'common'
|
|
// exclude 'some exclusion'
|
|
// include 'some inclusion'
|
|
}
|
|
resources {
|
|
srcDir 'buildcraft_resources'
|
|
def l10n = file('../BuildCraft-Localization')
|
|
if(l10n.exists())
|
|
srcDir l10n
|
|
exclude '**/.md' // exclude readme from localization repo
|
|
// exclude 'some exclusion'
|
|
// include 'some inclusion'
|
|
}
|
|
}
|
|
api {
|
|
java {
|
|
srcDir 'api'
|
|
}
|
|
}
|
|
}
|
|
|
|
// Obfuscated Jar location
|
|
ext.jarFile = zipTree(jar.archivePath)
|
|
|
|
// Add API dir to the IDEA module
|
|
idea.module.sourceDirs += sourceSets.api.java.srcDirs
|
|
|
|
processResources
|
|
{
|
|
// replace stuff in mcmod.info, nothing else
|
|
from(sourceSets.main.resources.srcDirs) {
|
|
include 'mcmod.info'
|
|
|
|
// replace version and mcversion
|
|
// ${version} and ${mcversion} are the exact strings being replaced
|
|
expand 'version':project.version, 'mcversion':project.minecraft.version
|
|
}
|
|
|
|
// copy everything else, that's not the mcmod.info
|
|
from(sourceSets.main.resources.srcDirs) {
|
|
exclude 'mcmod.info'
|
|
}
|
|
}
|
|
|
|
// --------------------
|
|
// extra jar section
|
|
// -------------------
|
|
|
|
|
|
|
|
def createMCModInfo(def id, def taskName)
|
|
{
|
|
File temp = new File("build/processing/" + taskName + "/mcmod.info")
|
|
temp.parentFile.mkdirs()
|
|
if (temp.exists())
|
|
temp.delete()
|
|
temp.createNewFile()
|
|
temp.write(groovy.json.JsonOutput.toJson([ext.mcModInfo[id]]))
|
|
temp.deleteOnExit()
|
|
return temp
|
|
}
|
|
|
|
def parseConfig(File config) {
|
|
if (!config.exists())
|
|
return null;
|
|
config.withReader {
|
|
def prop = new Properties()
|
|
prop.load(it)
|
|
return (new ConfigSlurper().parse(prop))
|
|
}
|
|
}
|
|
|
|
// add a source jar
|
|
task sourceJar(type: Jar) {
|
|
from sourceSets.main.allSource
|
|
from sourceSets.api.allSource
|
|
classifier = 'sources'
|
|
}
|
|
|
|
// add api classes to javadoc
|
|
javadoc {
|
|
source += sourceSets.api.allSource
|
|
}
|
|
|
|
// add a javadoc jar
|
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
|
classifier = 'javadoc'
|
|
from 'build/docs/javadoc'
|
|
}
|
|
|
|
// because the normal output has been made to be obfuscated
|
|
task deobfJar(type: Jar) {
|
|
from sourceSets.main.output
|
|
from sourceSets.api.output
|
|
classifier = 'dev'
|
|
}
|
|
|
|
task apiJar(type: Jar) {
|
|
from sourceSets.api.output
|
|
classifier = 'api'
|
|
}
|
|
|
|
task coreJar(type: Jar, dependsOn: reobf) {
|
|
|
|
destinationDir = file("modules")
|
|
classifier = 'core'
|
|
|
|
doFirst {
|
|
from(createMCModInfo(0, name).parentFile)
|
|
from(project.ext.jarFile) {
|
|
includes.addAll(["assets/buildcraft/**", "assets/buildcraftcore/**", "buildcraft/BuildCraftCore**", "buildcraft/BuildCraftMod**", "buildcraft/core/**", "buildcraft/api/**", "cofh/**", "changelog/**", "LICENSE**", "versions.txt"])
|
|
}
|
|
}
|
|
}
|
|
|
|
task buildersJar(type: Jar, dependsOn: reobf) {
|
|
|
|
destinationDir = file("modules")
|
|
classifier = 'builders'
|
|
|
|
doFirst {
|
|
from(createMCModInfo(1, name).parentFile)
|
|
from(project.ext.jarFile) {
|
|
includes.addAll(["assets/buildcraftbuilders/**", "buildcraft/builders/**", "buildcraft/BuildCraftBuilders**", "LICENSE"])
|
|
}
|
|
}
|
|
}
|
|
|
|
task energyJar(type: Jar, dependsOn: reobf) {
|
|
|
|
destinationDir = file("modules")
|
|
classifier = 'energy'
|
|
|
|
doFirst {
|
|
from(createMCModInfo(2, name).parentFile)
|
|
from(project.ext.jarFile) {
|
|
includes.addAll(["assets/buildcraftenergy/**", "buildcraft/energy/**", "buildcraft/BuildCraftEnergy**", "LICENSE"])
|
|
}
|
|
}
|
|
}
|
|
|
|
task factoryJar(type: Jar, dependsOn: reobf) {
|
|
|
|
destinationDir = file("modules")
|
|
classifier = 'factory'
|
|
|
|
doFirst {
|
|
from(createMCModInfo(3, name).parentFile)
|
|
from(project.ext.jarFile) {
|
|
includes.addAll(["assets/buildcraftfactory/**", "buildcraft/factory/**", "buildcraft/BuildCraftFactory**", "LICENSE"])
|
|
}
|
|
}
|
|
}
|
|
|
|
task siliconJar(type: Jar, dependsOn: reobf) {
|
|
|
|
destinationDir = file("modules")
|
|
classifier = 'silicon'
|
|
|
|
doFirst {
|
|
from(createMCModInfo(4, name).parentFile)
|
|
from(project.ext.jarFile) {
|
|
includes.addAll(["assets/buildcraftsilicon/**", "buildcraft/silicon/**", "buildcraft/BuildCraftSilicon**", "LICENSE"])
|
|
}
|
|
}
|
|
}
|
|
|
|
task transportJar(type: Jar, dependsOn: reobf) {
|
|
|
|
destinationDir = file("modules")
|
|
classifier = 'transport'
|
|
|
|
doFirst {
|
|
from(createMCModInfo(5, name).parentFile)
|
|
from(project.ext.jarFile) {
|
|
includes.addAll(["assets/buildcrafttransport/**", "buildcraft/transport/**", "buildcraft/BuildCraftTransport**", "LICENSE"])
|
|
}
|
|
}
|
|
}
|
|
|
|
task roboticsJar(type: Jar, dependsOn: reobf) {
|
|
|
|
destinationDir = file("modules")
|
|
classifier = 'robotics'
|
|
|
|
doFirst {
|
|
from(createMCModInfo(6, name).parentFile)
|
|
from(project.ext.jarFile) {
|
|
includes.addAll(["assets/buildcraftrobotics/**", "buildcraft/robotics/**", "buildcraft/BuildCraftRobotics**", "LICENSE"])
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// add api classes to main package
|
|
jar {
|
|
from sourceSets.api.output
|
|
}
|
|
|
|
checkstyle {
|
|
configFile = file('guidelines/buildcraft.checkstyle')
|
|
}
|
|
|
|
checkstyleApi.exclude 'cofh/**'
|
|
|
|
// make sure all of these happen when we run build
|
|
build.dependsOn sourceJar, javadocJar, deobfJar, apiJar
|
|
|
|
// --------------------
|
|
// maven section
|
|
// -------------------
|
|
|
|
// create the deployerJars dependency configuration
|
|
configurations {
|
|
deployerJars
|
|
sshAntTask
|
|
}
|
|
|
|
dependencies {
|
|
// dependency in deployerJars, for maven deployment. see definition in mavenDeployer{} below
|
|
deployerJars "org.apache.maven.wagon:wagon-ssh:2.2"
|
|
sshAntTask 'org.apache.ant:ant-jsch:1.9.6', 'com.jcraft:jsch:0.1.53'
|
|
}
|
|
|
|
clean{
|
|
delete "modules"
|
|
}
|
|
|
|
// specify artifacts to be uploaded
|
|
artifacts {
|
|
// the default jar is already here by default
|
|
archives sourceJar
|
|
archives javadocJar
|
|
archives deobfJar
|
|
archives apiJar
|
|
|
|
// Modules
|
|
archives coreJar
|
|
archives buildersJar
|
|
archives energyJar
|
|
archives factoryJar
|
|
archives siliconJar
|
|
archives transportJar
|
|
archives roboticsJar
|
|
}
|
|
|
|
def sftp(String subPath, Closure antFileset = {}) {
|
|
ant {
|
|
taskdef(name: 'scp', classname: 'org.apache.tools.ant.taskdefs.optional.ssh.Scp',
|
|
classpath: configurations.sshAntTask.asPath)
|
|
Map sftpArgs = [
|
|
verbose : 'yes',
|
|
todir : priv.username + "@" + priv.host + ":" + priv.remotedir + version + "/" + subPath,
|
|
port: priv.port,
|
|
password: priv.password,
|
|
sftp: true,
|
|
trust: 'yes'
|
|
]
|
|
delegate.scp(sftpArgs) {
|
|
antFileset.delegate = delegate
|
|
antFileset()
|
|
}
|
|
}
|
|
}
|
|
|
|
task upload(dependsOn: build) {
|
|
description = 'Update files on remote server.'
|
|
doFirst {
|
|
sftp("") {
|
|
fileset(dir: libsDir)
|
|
}
|
|
sftp("modules") {
|
|
fileset(dir: 'modules')
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (ext.priv == null)
|
|
upload.enabled = false;
|
|
|
|
uploadArchives {
|
|
// make sure this happens after reobfuscation
|
|
dependsOn 'reobf'
|
|
|
|
repositories {
|
|
if (project.hasProperty("filesmaven")) { // if this is the Forge server, and this stuff is defined...
|
|
logger.info('Publishing to files server')
|
|
|
|
mavenDeployer {
|
|
// specify the jars that maven needs to deploy here
|
|
configuration = configurations.deployerJars
|
|
|
|
// authentication, again, specially set in the forge server environment
|
|
repository(url: project.filesmaven.url) {
|
|
authentication(userName: project.filesmaven.username, privateKey: project.filesmaven.key)
|
|
}
|
|
|
|
// here you specify all your metadata
|
|
// this is the definition of the maven pom.xml. This is simply a DSL to define the XML. Not actual fields or things to set.
|
|
pom {
|
|
groupId = project.group
|
|
version = project.version
|
|
artifactId = project.archivesBaseName
|
|
project {
|
|
name project.archivesBaseName
|
|
packaging 'jar'
|
|
description 'A Minecraft mod adding all sorts of machinery'
|
|
url 'http://www.mod-buildcraft.com/'
|
|
|
|
scm {
|
|
url 'https://github.com/BuildCraft/BuildCraft'
|
|
connection 'scm:git:git://github.com/BuildCraft/BuildCraft.git'
|
|
developerConnection 'scm:git:git@github.com:BuildCraft/BuildCraft.git'
|
|
}
|
|
|
|
issueManagement {
|
|
system 'github'
|
|
url 'https://github.com/BuildCraft/BuildCraft/issues'
|
|
}
|
|
|
|
licenses {
|
|
license {
|
|
name 'Minecraft Mod Public License'
|
|
url 'http://www.mod-buildcraft.com/MMPL-1.0.txt'
|
|
distribution 'repo'
|
|
}
|
|
}
|
|
|
|
developers {
|
|
developer {
|
|
id 'SpaceToad'
|
|
name 'SpaceToad'
|
|
roles { role 'developer' }
|
|
}
|
|
developer {
|
|
id 'CovertJaguar'
|
|
name 'CovertJaguar'
|
|
roles { role 'developer' }
|
|
}
|
|
developer {
|
|
id 'SirSngir'
|
|
name 'SirSengir'
|
|
roles { role 'developer' }
|
|
}
|
|
developer {
|
|
id 'Krapht'
|
|
name 'Krapht'
|
|
roles { role 'developer' }
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// otherwise publishing to the local repo in ~/.m2 is fine...
|
|
add project.repositories.mavenLocal()
|
|
}
|
|
}
|
|
}
|