Files
aiscape/modernized-client/build.gradle
2025-09-06 08:33:20 -07:00

272 lines
7.0 KiB
Groovy

plugins {
id 'java'
id 'application'
id 'eclipse'
id 'idea'
}
group = 'com.openosrs'
version = '1.0.0'
description = 'OpenOSRS Modernized Client - Agent-Friendly RuneScape Client'
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
application {
mainClass = 'com.openosrs.client.ModernizedClient'
applicationName = 'modernized-client'
}
repositories {
mavenCentral()
maven {
url 'https://repo.runelite.net'
content {
includeGroupByRegex "net\\.runelite.*"
}
}
maven {
url 'https://raw.githubusercontent.com/open-osrs/hosting/master'
content {
includeGroupByRegex "com\\.openosrs.*"
}
}
}
dependencies {
// Logging
implementation 'org.slf4j:slf4j-api:2.0.9'
implementation 'ch.qos.logback:logback-classic:1.4.11'
// JSON processing
implementation 'com.fasterxml.jackson.core:jackson-core:2.15.2'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.15.2'
// Utilities
implementation 'com.google.guava:guava:32.1.2-jre'
implementation 'org.apache.commons:commons-lang3:3.13.0'
implementation 'commons-io:commons-io:2.13.0'
// Networking
implementation 'org.apache.httpcomponents.client5:httpclient5:5.2.1'
implementation 'org.apache.httpcomponents.core5:httpcore5:5.2.2'
// Concurrency
implementation 'net.jcip:jcip-annotations:1.0'
// Optional: RuneLite API compatibility (if needed)
// implementation 'net.runelite:runelite-api:1.10.17'
// Testing
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'
testImplementation 'org.mockito:mockito-core:5.5.0'
testImplementation 'org.mockito:mockito-junit-jupiter:5.5.0'
testImplementation 'org.assertj:assertj-core:3.24.2'
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
options.compilerArgs.addAll([
'-Xlint:all',
'-Xlint:-processing',
'-Werror'
])
}
test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
exceptionFormat "full"
}
}
jar {
manifest {
attributes(
'Main-Class': 'com.openosrs.client.ModernizedClient',
'Implementation-Title': 'OpenOSRS Modernized Client',
'Implementation-Version': project.version,
'Implementation-Vendor': 'OpenOSRS',
'Built-Date': new Date(),
'Built-By': System.getProperty('user.name'),
'Built-JDK': System.getProperty('java.version')
)
}
// Include dependencies in fat jar for easy distribution
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
exclude 'META-INF/*.SF'
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.RSA'
}
// Task to create a distribution package
task createDistribution(type: Zip) {
group = 'distribution'
description = 'Creates a distribution package'
archiveFileName = "modernized-client-${version}.zip"
destinationDirectory = file("$buildDir/distributions")
from jar
from 'README.md'
from 'LICENSE'
into('scripts') {
from fileTree('scripts')
filePermissions {
unix(0755)
}
}
into('config') {
from fileTree('config')
}
}
// Development tasks
task runWithDebug(type: JavaExec) {
group = 'development'
description = 'Run the client with debug logging'
classpath = sourceSets.main.runtimeClasspath
mainClass = 'com.openosrs.client.ModernizedClient'
systemProperty 'org.slf4j.simpleLogger.defaultLogLevel', 'DEBUG'
systemProperty 'org.slf4j.simpleLogger.showDateTime', 'true'
systemProperty 'org.slf4j.simpleLogger.dateTimeFormat', 'HH:mm:ss.SSS'
args = ['--debug']
}
task generateApiDocs(type: Javadoc) {
group = 'documentation'
description = 'Generate API documentation'
source = sourceSets.main.allJava
classpath = sourceSets.main.runtimeClasspath
options {
title = "OpenOSRS Modernized Client API"
author = true
version = true
use = true
windowTitle = "OpenOSRS Modernized Client API"
docTitle = "OpenOSRS Modernized Client API"
links(
'https://docs.oracle.com/en/java/javase/17/docs/api/',
'https://www.slf4j.org/apidocs/',
'https://google.github.io/guava/releases/32.1.2-jre/api/docs/'
)
addStringOption('Xdoclint:none', '-quiet')
}
destinationDir = file("$buildDir/docs/api")
include '**/api/**'
include '**/scripting/**'
include '**/plugins/**'
}
// Quality assurance
task checkCodeStyle {
group = 'verification'
description = 'Check code style and conventions'
doLast {
println "Code style check would go here"
// Could integrate with SpotBugs, PMD, or Checkstyle
}
}
// Performance profiling
task profileStartup(type: JavaExec) {
group = 'profiling'
description = 'Profile client startup performance'
classpath = sourceSets.main.runtimeClasspath
mainClass = 'com.openosrs.client.ModernizedClient'
jvmArgs = [
'-XX:+PrintGCDetails',
'-XX:+PrintGCTimeStamps',
'-XX:+PrintGCApplicationStoppedTime',
'-Xloggc:build/gc.log'
]
systemProperty 'profile.startup', 'true'
}
// Example script runners
task runWoodcuttingExample(type: JavaExec) {
group = 'examples'
description = 'Run the woodcutting script example'
classpath = sourceSets.main.runtimeClasspath
mainClass = 'com.openosrs.client.ModernizedClient'
args = ['--script', 'woodcutting', '--auto-start']
}
task runCombatExample(type: JavaExec) {
group = 'examples'
description = 'Run the combat training script example'
classpath = sourceSets.main.runtimeClasspath
mainClass = 'com.openosrs.client.ModernizedClient'
args = ['--script', 'combat-training', '--auto-start']
}
task runLoginExample(type: JavaExec) {
group = 'examples'
description = 'Run the login system demonstration'
classpath = sourceSets.main.runtimeClasspath
mainClass = 'com.openosrs.client.examples.ExampleLoginAgent'
// Enable debug logging for the example
systemProperty 'org.slf4j.simpleLogger.defaultLogLevel', 'DEBUG'
systemProperty 'org.slf4j.simpleLogger.showDateTime', 'true'
systemProperty 'org.slf4j.simpleLogger.dateTimeFormat', 'HH:mm:ss.SSS'
standardInput = System.in
}
// Clean up build artifacts
clean {
delete 'logs'
delete 'cache'
delete 'profiles'
}
// IDE integration
eclipse {
project {
name = 'modernized-client'
comment = 'OpenOSRS Modernized Client for AI Agents'
}
}
idea {
module {
downloadJavadoc = true
downloadSources = true
}
}
// Wrapper configuration
wrapper {
gradleVersion = '8.3'
distributionType = Wrapper.DistributionType.ALL
}