diff --git a/build.gradle.kts b/build.gradle.kts index fad9cb0..282dee7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "su.sonoma" -version = "1.0-SNAPSHOT" +version = "0.1" repositories { mavenCentral() @@ -14,6 +14,7 @@ repositories { dependencies { testImplementation(kotlin("test")) implementation("io.ktor:ktor-network:3.1.3") + implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.22") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") } @@ -21,6 +22,26 @@ kotlin { jvmToolchain(25) } +tasks.jar { + dependsOn("buildTunLib") + dependsOn(configurations.runtimeClasspath) + + manifest { + attributes["Main-Class"] = "su.sonoma.MainKt" + } + + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + + from(sourceSets.main.get().output) + + from({ + configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) } + }) + + archiveBaseName.set(rootProject.name) + archiveVersion.set(version.toString()) +} + tasks.test { useJUnitPlatform() } @@ -35,6 +56,11 @@ tasks.register("runServer") { "--add-opens=java.base/java.io=ALL-UNNAMED" ) dependsOn("buildTunLib") + + systemProperty( + "java.library.path", + "${projectDir}/build/native/" + ) } tasks.register("runClient") { @@ -47,6 +73,11 @@ tasks.register("runClient") { "--add-opens=java.base/java.io=ALL-UNNAMED" ) dependsOn("buildTunLib") + + systemProperty( + "java.library.path", + "${projectDir}/build/native/" + ) } val javaHome = Jvm.current().javaHome.absolutePath @@ -74,4 +105,53 @@ tasks.register("buildTunLib") { "-I$javaHome/include", "-I$javaHome/include/linux" ) +} + +tasks.register("generateRunScript") { + + val output = layout.buildDirectory.file("tmp/${rootProject.name}") + val name = rootProject.name.plus('-').plus(version) + val jarName = name.plus(".jar") + + outputs.file(output) + + doLast { + val script = output.get().asFile + + script.parentFile.mkdirs() + + script.writeText(""" + #!/bin/bash + + java \ + -Djava.library.path="." \ + -jar "$jarName" "$@" + """.trimIndent()) + + script.setExecutable(true) + } +} + +tasks.register("packageApp") { + group = "build" + + destinationDirectory.set(layout.buildDirectory.dir("dist")) + + compression = Compression.GZIP + + dependsOn("jar") + dependsOn("generateRunScript") + + val name = rootProject.name.plus('-').plus(version) + val jarName = name.plus(".jar") + + archiveFileName.set("$name.tar.gz") + + + from("build/libs/$jarName") + + from("build/native/libtun.so") + + from("build/tmp/${rootProject.name}") + } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 7fc6f1f..29e08e8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -kotlin.code.style=official +kotlin.code.style=official \ No newline at end of file diff --git a/src/main/kotlin/Client.kt b/src/main/kotlin/Client.kt index d9498e2..f93840f 100644 --- a/src/main/kotlin/Client.kt +++ b/src/main/kotlin/Client.kt @@ -1,4 +1,5 @@ package su.sonoma + import kotlinx.coroutines.* import java.io.DataInputStream import java.net.Socket diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index 96d23fc..5c8c64f 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,13 +1,5 @@ package su.sonoma -import io.ktor.network.selector.* -import io.ktor.network.sockets.* -import io.ktor.utils.io.* -import io.ktor.utils.io.core.readBytes -import kotlinx.coroutines.* -import kotlinx.io.readByteArray -import java.io.FileInputStream - fun main(args: Array) { val host = "192.168.88.227" val port = 9093 diff --git a/src/main/kotlin/TunDevice.kt b/src/main/kotlin/TunDevice.kt index b79eb5b..7ab8401 100644 --- a/src/main/kotlin/TunDevice.kt +++ b/src/main/kotlin/TunDevice.kt @@ -1,5 +1,6 @@ package su.sonoma +import java.io.File import java.io.FileDescriptor import java.io.FileInputStream import java.io.FileOutputStream @@ -12,9 +13,7 @@ class TunDevice( companion object { init { - System.load( - "${System.getProperty("user.dir")}/build/native/libtun.so" - ) + System.loadLibrary("tun") } }