Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
!/docs/
!/gradle/
!/.github/
!/buildSrc/

# Exclude generated files
bin/
Expand Down
12 changes: 12 additions & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

87 changes: 3 additions & 84 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,85 +1,4 @@
import org.codehaus.groovy.runtime.GStringImpl
group = "cn.harryh"
version = "3.11.1"

buildscript {
repositories {
maven { url = "https://maven.aliyun.com/repository/public/" } // Aliyun Mirrors
maven { url = "https://maven.aliyun.com/repository/gradle-plugin/" }
mavenLocal()
mavenCentral()
}

dependencies {
classpath "org.openjfx:javafx-plugin:0.1.0"
}
}


allprojects {
apply plugin: "eclipse"
apply plugin: "java-library"
apply plugin: "org.openjfx.javafxplugin"

version = "3.11.1"
ext {
// App Metadata
appName = "ArkPets"
appAuthor = "Harry Huang"
appYearBegin = "2022"
appYearCurrent = new Date().format("yyyy", TimeZone.getTimeZone("GMT+0:00"))
appCopyright = "Copyright (c) ${appYearBegin}-${appYearCurrent} ${appAuthor}" as GStringImpl
// Prefabs
gdxVersion = "1.11.0"
jnaVersion = "5.12.1"
javaFXVersion = "17.0.15"
}

repositories {
maven { url = "https://maven.aliyun.com/repository/public/" } // Aliyun Mirrors
mavenLocal()
mavenCentral()
}
}


project(":desktop") {
dependencies {
implementation project(":core")
// libGDX Desktop
api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
}
}


project(":core") {
dependencies {
// Spine Runtime
api "com.esotericsoftware.spine:spine-libgdx:3.8.99.1"
// libGDX
api "com.badlogicgames.gdx:gdx:$gdxVersion"
api "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
api "com.badlogicgames.gdx:gdx-lwjgl3-angle:$gdxVersion"
// JNA
api "net.java.dev.jna:jna:$jnaVersion"
api "net.java.dev.jna:jna-platform:$jnaVersion"
// JavaFX
api "org.openjfx:javafx-base:$javaFXVersion:win"
api "org.openjfx:javafx-controls:$javaFXVersion:win"
api "org.openjfx:javafx-graphics:$javaFXVersion:win"
api "org.openjfx:javafx-fxml:$javaFXVersion:win"
// JFoenix
api "com.jfoenix:jfoenix:9.0.1"
// FastJson
api "com.alibaba.fastjson2:fastjson2:2.0.60"
// CommonMark
api "org.commonmark:commonmark:0.24.0"
api "org.commonmark:commonmark-ext-autolink:0.24.0"
api "org.commonmark:commonmark-ext-gfm-strikethrough:0.24.0"
api "org.commonmark:commonmark-ext-gfm-tables:0.24.0"
// reload4j
api "ch.qos.reload4j:reload4j:1.2.26"
// TiniPinyin
api 'com.github.promeg:tinypinyin:2.0.3'
// OpenCC4j
api 'com.github.houbb:opencc4j:1.14.0'
}
}
defaultTasks("clean", "distAll")
1 change: 1 addition & 0 deletions buildSrc/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
!/src/**/*
13 changes: 13 additions & 0 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
plugins {
id 'groovy-gradle-plugin'
}

repositories {
maven { url = "https://maven.aliyun.com/repository/gradle-plugin/" }
mavenLocal()
gradlePluginPortal()
}

dependencies {
implementation("org.openjfx.javafxplugin:org.openjfx.javafxplugin.gradle.plugin:0.1.0")
}
24 changes: 24 additions & 0 deletions buildSrc/src/main/groovy/arkpets-conventions.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
plugins {
id "java-library"
id "org.openjfx.javafxplugin"
}

group = rootProject.group
version = rootProject.version

javafx {
version = "17.0.15"
modules = ['javafx.base','javafx.graphics','javafx.controls', 'javafx.fxml']
}

tasks.withType(JavaCompile.class) {
sourceCompatibility = "17"
targetCompatibility = "17"
options.encoding = "UTF-8"
}

repositories {
maven { url = "https://maven.aliyun.com/repository/public/" } // Aliyun Mirrors
mavenLocal()
mavenCentral()
}
188 changes: 188 additions & 0 deletions buildSrc/src/main/groovy/arkpets-dist.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
import static cn.harryh.arkpets.build.BuildConsts.*
import static cn.harryh.arkpets.build.BuildConsts.PackageConfig.*

/* EXECUTION TASKS */

// Runs the app without debug.
tasks.register("run", JavaExec) {
dependsOn = ["classes"]
group = "execute"

mainClass = mainClassName
classpath = sourceSets.main.runtimeClasspath
standardInput = System.in
workingDir = assetsDir

setIgnoreExitValue(true)

if (org.gradle.internal.os.OperatingSystem.current() == org.gradle.internal.os.OperatingSystem.MAC_OS) {
jvmArgs += "-XstartOnFirstThread" // Required to run on macOS
}
}

// Runs the app within debug.
tasks.register("debug", JavaExec) {
dependsOn = ["classes"]
group = "execute"

mainClass = mainClassName
classpath = sourceSets.main.runtimeClasspath
standardInput = System.in
workingDir = assetsDir

setIgnoreExitValue(true)
setDebug(true)
}


/* DISTRIBUTION TASKS */

// Environment vars
def rootDir = project.rootDir
def javaHome = System.getProperty('java.home')
def osName = System.getProperty('os.name').toLowerCase(Locale.ROOT).split(' ')[0]
def osPathSep = File.pathSeparatorChar

// Distribution related vars
def jarLibDir = layout.buildDirectory.dir("libs").get().toString()
def jarLibName = project.name + "-" + project.version
def jlinkDir = layout.buildDirectory.dir("jlink").get().toString()
def jpackageDir = layout.buildDirectory.dir("jpackage").get().toString()
def distDir = layout.buildDirectory.dir("dist").get().toString()
def distName = appName + "-v" + project.version


// Generates a distributable JAR file for the app.
tasks.register("distJar", Jar) {
dependsOn = ["classes"]
group = "dist"

doLast() {
copy {
from "${jarLibDir}/${jarLibName}.jar"
into distDir
rename "${jarLibName}.jar", "${distName}.jar"
}
}

duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes 'Main-Class': mainClassName
}
dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
with jar
}

// Creates a customized Java Runtime Environment for the app.
tasks.register("jlink", Exec) {
dependsOn = ["distJar"]
group = "dist"

doFirst() { delete jlinkDir }

workingDir project.projectDir
inputs.property("runtime", "${jlinkDir}/runtime")
commandLine = [
"${javaHome}/bin/jlink",
'--module-path', "${javaHome}/jmods",
'--add-modules', jlinkModuleList,
'--output', "${jlinkDir}/runtime",
'--strip-debug',
'--no-header-files',
'--no-man-pages',
'--vm=server',
'--compress=1',
'--include-locales', jlinkLocalesList
] as List<String>
outputs.dir(jlinkDir)
}

// Packs the app into an EXE.
tasks.register("jpackage", Exec) {
dependsOn = ["jlink"]
group = "dist"

doFirst() {
fileTree(jarLibDir).size()
if (fileTree(jarLibDir).size() > 1)
throw new RuntimeException("There may be legacy jars in the libs dir, please run 'clean' first.")
delete jpackageDir
}
doLast() {
copy {
from "${rootDir}/LICENSE"
into jpackageDir
}
}

workingDir project.projectDir
def commands = [
"${javaHome}/bin/jpackage",
'--input', jarLibDir,
'--dest', jpackageDir,
'--type', 'app-image',
'--name', appName,
'--vendor', appAuthor,
'--app-version', project.version,
'--main-class', mainClassName,
'--main-jar', jar.archiveFile.get().asFile.getName(),
'--runtime-image', "${jlinkDir}/runtime"
]
if (osName.contains('windows')) {
commands << '--icon'
commands << "${assetsDir}/icons/icon.ico"
} else if (osName.contains('linux')) {
commands << '--icon'
commands << "${assetsDir}/icons/icon.png"
} else if (osName.contains('mac')) {
commands << '--java-options'
commands << "-XstartOnFirstThread"
}
commandLine = commands as List<String>
}

// Generates a distributable ZIP file for the app.
tasks.register("distZip", Zip) {
dependsOn = ["jpackage"]
group = "dist"

from(jpackageDir) { include("**") }
from(rootDir) { include("README.md") }
archiveFileName = "${distName}.zip"
destinationDirectory = file(distDir)
}

// Generates a distributable EXE file for the app, using Inno Setup.
// Note that you must install Inno Setup in your environment and add it to PATH before running this task.
tasks.register("distExe", Exec) {
dependsOn = ["jpackage"]
group = "dist"

workingDir rootDir
def commands = [
"iscc",
"/Q",
issFileRel
]
commandLine = commands
}

// Generates ALL kinds of distributing files.
tasks.register("distAll") {
dependsOn = ["distJar", "distZip", "distExe"]
group = "dist"

doLast() {
logger.lifecycle("All files were successfully generated, see: ${new File(distDir as String).absolutePath}")
try {
delete jarLibDir
delete jlinkDir
delete jpackageDir
} catch (Exception ignored) {
logger.lifecycle("Unable to delete temp files.")
}
}
}
32 changes: 32 additions & 0 deletions buildSrc/src/main/java/cn/harryh/arkpets/build/BuildConsts.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package cn.harryh.arkpets.build;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;


public class BuildConsts {
public static final String appName = "ArkPets";
public static final String appAuthor = "Harry Huang";
public static final String appYearBegin = "2022";
public static final String appYearCurrent;
public static final String appCopyright;

public static final String mainClassName = "cn.harryh.arkpets.DesktopLauncher";
public static final File assetsDir = new File("../assets");

static {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+0:00"));
appYearCurrent = sdf.format(new Date());

appCopyright = "Copyright (c) %s-%s %s".formatted(appYearBegin, appYearCurrent, appAuthor);
}

public static class PackageConfig {
public static final String issFileRel = "docs/scripts/ExePacking.iss";
public static final String jlinkModuleList = "java.base,java.desktop,java.logging,java.management,java.scripting,jdk.crypto.ec,jdk.localedata,jdk.unsupported";
public static final String jlinkLocalesList = "en-US,zh-CN";
}
}
Loading