ACLauncher/build.gradle
2023-07-15 13:03:48 +10:00

321 lines
11 KiB
Groovy

import java.text.SimpleDateFormat
buildscript {
repositories {
mavenCentral()
maven {
url 'https://jitpack.io'
content {
includeGroup "com.github.RyanTheAllmighty.gettext"
includeGroup "com.github.ATLauncher.gradle-macappbundle"
}
}
}
dependencies {
classpath 'com.github.RyanTheAllmighty.gettext:gettext-gradle-plugin:aab5c30bf8'
classpath 'com.github.ATLauncher.gradle-macappbundle:edu.sc.seis.macAppBundle.gradle.plugin:d22f8cdb94'
}
}
plugins {
id 'java'
id 'application'
id 'org.cadixdev.licenser' version '0.6.1'
id 'com.adarshr.test-logger' version '3.2.0'
id 'edu.sc.seis.macAppBundle' version '2.3.0'
id 'edu.sc.seis.launch4j' version '3.0.3'
id 'de.undercouch.download' version '5.4.0'
id 'com.github.johnrengelman.shadow' version '8.1.1'
id 'com.github.ben-manes.versions' version '0.47.0'
id 'com.apollographql.apollo' version '2.5.14'
}
apply plugin: 'org.mini2Dx.gettext'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
group = 'com.atlauncher'
version = rootProject.file('src/main/resources/version').text.trim().replace('.Beta', '')
repositories {
mavenCentral()
gradlePluginPortal()
maven {
url 'https://libraries.minecraft.net'
}
maven {
url 'https://jitpack.io'
content {
includeGroup "com.github.RyanTheAllmighty.gettext"
includeGroup "com.github.Vatuu"
includeGroup "com.gitlab.doomsdayrs"
includeGroup "com.github.MCRcortex"
}
}
}
dependencies {
implementation 'net.java.dev.jna:jna:5.13.0'
implementation 'net.java.dev.jna:jna-platform:5.13.0'
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.google.guava:guava:32.1.1-jre'
implementation 'org.tukaani:xz:1.9'
implementation 'com.mojang:authlib:1.5.21'
implementation 'net.iharder:base64:2.3.9'
implementation 'com.github.Vatuu:discord-rpc:1.6.2'
implementation 'net.sf.jopt-simple:jopt-simple:5.0.4'
implementation 'org.zeroturnaround:zt-zip:1.15'
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
implementation 'com.squareup.okhttp3:okhttp-tls:4.11.0'
implementation 'io.sentry:sentry:6.25.0'
implementation 'com.github.RyanTheAllmighty.gettext:gettext-lib:88ae68d897'
implementation 'org.apache.logging.log4j:log4j-api:2.20.0'
implementation 'org.apache.logging.log4j:log4j-core:2.20.0'
implementation 'com.sangupta:murmur:1.0.0'
implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'org.apache.commons:commons-text:1.10.0'
implementation 'org.apache.commons:commons-compress:1.23.0'
implementation 'com.formdev:flatlaf:3.1.1'
implementation 'com.formdev:flatlaf-extras:3.1.1'
implementation 'com.github.oshi:oshi-core:6.4.4'
implementation 'net.freeutils:jlhttp:2.6'
implementation 'joda-time:joda-time:2.12.5'
implementation 'org.commonmark:commonmark:0.21.0'
implementation 'com.github.hypfvieh:dbus-java:3.3.2'
implementation 'com.apollographql.apollo:apollo-runtime:2.5.14'
implementation 'com.apollographql.apollo:apollo-http-cache:2.5.14'
implementation 'com.apollographql.apollo:apollo-rx3-support:2.5.14'
implementation 'com.github.MCRcortex:nekodetector:Version-1.1-pre'
// RxJava
implementation("io.reactivex.rxjava3:rxjava:3.1.6")
implementation("com.gitlab.doomsdayrs:rxswing:a5749ad421") // TODO tag
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.mockito:mockito-core:4.11.0' // Cannot update to 5.x.x as Java 11 min
testImplementation 'org.mockito:mockito-inline:4.11.0' // Cannot update to 5.x.x as Java 11 min
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.3'
testImplementation 'org.assertj:assertj-swing-junit:3.17.1'
testImplementation 'org.mock-server:mockserver-netty:5.15.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.3'
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.9.3'
}
application {
mainClass = 'com.atlauncher.App'
applicationDefaultJvmArgs = [
"-Djna.nosys=true",
"-Djava.net.preferIPv4Stack=true",
"-Dawt.useSystemAAFontSettings=on",
"-Dswing.aatext=true"
]
}
tasks.named('test') {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
testlogger {
theme 'mocha'
}
}
jar {
manifest {
attributes(
'SplashScreen-Image': '/assets/image/splash-screen.png',
'Implementation-Title': project.name,
'Implementation-Version': archiveVersion,
'Implementation-Vender': 'ATLauncher',
'Main-Class': 'com.atlauncher.App',
'Multi-Release': 'true'
)
}
}
apollo {
customTypeMapping = [
"ID" : "java.lang.String",
"DateTime" : "java.util.Date"
]
packageName = "com.atlauncher.graphql"
}
gettext {
translations {
srcDir = 'src'
include = 'main/java/com/atlauncher/**/*.java'
excludes = [
'main/java/com/atlauncher/adapter/**/*.java',
'main/java/com/atlauncher/annot/**/*.java',
'main/java/com/atlauncher/collection/**/*.java',
'main/java/com/atlauncher/evnt/**/*.java',
'main/java/com/atlauncher/exceptions/**/*.java',
'main/java/com/atlauncher/interfaces/**/*.java',
'main/java/com/atlauncher/listener/**/*.java',
'main/java/com/atlauncher/utils/**/*.java'
]
commentFormat = ' #. '
outputFilename = 'translations.pot'
}
}
license {
header = project.file('LICENSEHEADER')
include '**/*.java'
exclude 'io/github/**/*.java'
exclude 'net/minecraft/**/*.java'
exclude 'com/atlauncher/graphql/**/*.java'
exclude 'com/atlauncher/gui/layouts/WrapLayout.java'
newLine = false
properties {
year = currentYear()
}
}
shadowJar {
archiveClassifier.set(null)
minimize {
exclude(dependency('org.apache.logging.log4j:.*:.*'))
exclude(dependency('com.formdev:.*:.*'))
exclude(dependency('com.github.jnr:.*:.*'))
exclude(dependency('com.github.hypfvieh:.*:.*'))
exclude(dependency('org.apache.commons:commons-compress:.*'))
}
// these are included by dbus-java which is only used on Linux
exclude("jni/x86_64-Windows/")
exclude("jni/x86_64-SunOS/")
exclude("jni/x86_64-OpenBSD/")
exclude("jni/x86_64-FreeBSD/")
exclude("jni/x86_64-DragonFlyBSD/")
exclude("jni/sparcv9-SunOS/")
exclude("jni/ppc-AIX/")
exclude("jni/ppc64-AIX/")
exclude("jni/i386-Windows/")
exclude("jni/i386-SunOS/")
exclude("jni/Darwin/")
archiveClassifier.set('')
}
macAppBundle {
mainClassName = 'com.atlauncher.App'
appName = 'ATLauncher'
appStyle = 'universalJavaApplicationStub'
runtimeConfigurationName = 'shadow'
jarTask = 'shadowJar'
icon = 'src/main/resources/assets/image/icon.icns'
javaProperties.put('user.dir', '$APP_ROOT/Contents/Java')
javaProperties.put('apple.laf.useScreenMenuBar', 'true')
javaExtras.put("-Djna.nosys", "true")
javaExtras.put("-Djava.net.preferIPv4Stack", "true")
javaExtras.put("-Dawt.useSystemAAFontSettings", "on")
javaExtras.put("-Dswing.aatext", "true")
bundleExtras.put("JVMVersion", project.targetCompatibility.toString() + "+")
}
copyToResourcesJava {
rename("ATLauncher-${project.version}.jar", "ATLauncher.jar")
}
def currentYear() {
def df = new SimpleDateFormat("yyyy")
df.setTimeZone(TimeZone.getTimeZone("UTC"))
return df.format(new Date())
}
launch4j {
outfile = "ATLauncher-${project.version}.exe"
jreMinVersion = "${project.targetCompatibility.toString()}"
mainClassName = 'com.atlauncher.App'
icon = "${projectDir}/src/main/resources/assets/image/icon.ico"
version = "${project.version}"
textVersion = "${project.version}"
copyright = "2013-${currentYear()} ${project.name}"
companyName = "${project.name}"
bundledJrePath = "jre/;%JAVA_HOME%;%PATH%"
jvmOptions = [
"-Djna.nosys=true",
"-Djava.net.preferIPv4Stack=true",
"-Dawt.useSystemAAFontSettings=on",
"-Dswing.aatext=true"
]
}
artifacts {
archives shadowJar
archives file(project.tasks.jar.getArchivePath().getPath().replace('.jar', '.exe').replace('libs', 'launch4j'))
archives file(project.tasks.jar.getArchivePath().getPath().replace('.jar', '.zip').replace('libs', 'distributions'))
}
test {
if (JavaVersion.current().isJava9Compatible()) {
jvmArgs '--add-opens=java.base/sun.security.x509=ALL-UNNAMED'
}
}
task copyArtifacts(type: Copy) {
dependsOn build
from shadowJar
from file(project.tasks.jar.getArchivePath().getPath().replace('.jar', '.exe').replace('libs', 'launch4j'))
from file(project.tasks.jar.getArchivePath().getPath().replace('.jar', '.zip').replace('libs', 'distributions'))
into "${projectDir}/dist"
}
task downloadNewerUniversalJavaApplicationStub(type: Download) {
description 'Downloads newer universalJavaApplicationStub'
src 'https://raw.githubusercontent.com/tofi86/universalJavaApplicationStub/404f5c1b008d6296065de7a93406b387c9f3dce1/src/universalJavaApplicationStub'
dest file("$buildDir/macApp/${project.name}.app/Contents/MacOS/universalJavaApplicationStub")
overwrite true
}
task createTestLauncherDir {
project.file('testLauncher/dev').mkdirs()
}
task createMacApp(type: Zip) {
dependsOn createApp, shadowJar, downloadNewerUniversalJavaApplicationStub
from("$buildDir/macApp") {
include "${project.name}.app/**"
exclude "${project.name}.app/Contents/MacOS"
}
from("$buildDir/macApp") {
include "${project.name}.app/Contents/MacOS/**"
fileMode 0777
}
archiveFileName = "${project.name}-${project.version}.zip"
}
copyArtifacts.finalizedBy {
println 'ATLauncher has been built. Distribution files are located in the dist directory.'
}
clean.doFirst {
delete "${projectDir}/dist"
}
project.afterEvaluate {
tasks.check {
dependsOn -= tasks.find {
it.name.equals("checkLicenses")
}
}
}
def shouldIgnoreUpdate = { String version -> return ['ALPHA', 'BETA', 'RC', '-M'].any { it -> version.toUpperCase().contains(it) }}
tasks.named("dependencyUpdates").configure {
rejectVersionIf {
shouldIgnoreUpdate(it.candidate.version)
}
}
build.finalizedBy copyArtifacts
shadowJar.dependsOn jar
build.dependsOn createExe, createMacApp
startScripts.dependsOn shadowJar
createExe.dependsOn shadowJar
createAppZip.dependsOn downloadNewerUniversalJavaApplicationStub
createDmg.dependsOn downloadNewerUniversalJavaApplicationStub