switch to envelope + jul

This commit is contained in:
2022-03-16 23:26:13 +08:00
parent 9ed9cb6b91
commit 4300b89db5
10 changed files with 91 additions and 32 deletions

View File

@@ -1,12 +1,14 @@
plugins {
id 'org.jetbrains.kotlin.jvm'
id 'application'
id 'net.woggioni.gradle.envelope'
id 'maven-publish'
}
import net.woggioni.gradle.envelope.EnvelopeJarTask
group = 'net.woggioni'
version = '0.1'
version = getProperty('gbcs.version')
repositories {
mavenCentral()
@@ -16,7 +18,7 @@ dependencies {
implementation group: 'org.slf4j', name: 'slf4j-api', version: getProperty('slf4j.version')
implementation group: 'io.netty', name: 'netty-codec-http', version: getProperty('netty.version')
runtimeOnly group: 'org.slf4j', name: 'slf4j-simple', version: getProperty('slf4j.version')
runtimeOnly group: 'org.slf4j', name: 'slf4j-jdk14', version: getProperty('slf4j.version')
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: getProperty('junit.jupiter.version')
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: getProperty('junit.jupiter.version')
@@ -24,22 +26,20 @@ dependencies {
}
java {
withJavadocJar()
withSourcesJar()
}
if(JavaVersion.current() > JavaVersion.VERSION_1_8) {
tasks.named(JavaPlugin.COMPILE_JAVA_TASK_NAME) {
options.release = 8
}
tasks.named(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaCompile) {
modularity.inferModulePath = true
options.compilerArgs << '--patch-module' << 'net.woggioni.gbcs=' + project.sourceSets.main.output.asPath
options.release = 11
}
run {
systemProperty 'org.slf4j.simpleLogger.defaultLogLevel', 'trace'
}
application {
mainClassName = 'net.woggioni.gcs.GradleBuildCacheServer'
Provider<EnvelopeJarTask> envelopeJarTaskProvider = tasks.named('envelopeJar', EnvelopeJarTask.class) {
mainModule = 'net.woggioni.gbcs'
mainClass = 'net.woggioni.gbcs.GradleBuildCacheServer'
systemProperty 'java.util.logging.config.class', 'net.woggioni.gbcs.LoggingConfig'
systemProperty 'log.config.source', 'logging.properties'
}
wrapper {
@@ -47,6 +47,11 @@ wrapper {
gradleVersion = getProperty('gradle.version')
}
def envelopeJarArtifact = artifacts.add('archives', envelopeJarTaskProvider.get().archiveFile.get().asFile) {
type = 'jar'
builtBy envelopeJarTaskProvider
}
publishing {
repositories {
maven {
@@ -55,7 +60,7 @@ publishing {
}
publications {
maven(MavenPublication) {
from(components["java"])
artifact envelopeJarArtifact
}
}
}

View File

@@ -1,8 +1,10 @@
gradle.lombok.plugin.version = 0.1
gradle.version = 7.4
gbcs.version = 0.1-SNAPSHOT
gradle.version = 7.4.1
kotlin.version = 1.6.10
envelope.gradle.plugin.version = 1.0-SNAPSHOT
lombok.gradle.plugin.version = 0.1
junit.jupiter.version = 5.8.2
netty.version = 4.1.74.Final
h2.version = 2.1.210

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -1,13 +1,20 @@
pluginManagement {
repositories {
maven {
content {
includeModule 'net.woggioni.gradle', 'envelope'
includeModule 'net.woggioni.gradle.envelope', 'net.woggioni.gradle.envelope.gradle.plugin'
includeModule 'net.woggioni.gradle', 'lombok'
includeModule 'net.woggioni.gradle.lombok', 'net.woggioni.gradle.lombok.gradle.plugin'
}
url = 'https://woggioni.net/mvn/'
}
gradlePluginPortal()
}
plugins {
id "net.woggioni.gradle.lombok" version "0.1"
id "net.woggioni.gradle.lombok" version getProperty('lombok.gradle.plugin.version')
id "net.woggioni.gradle.envelope" version getProperty('envelope.gradle.plugin.version')
id 'org.jetbrains.kotlin.jvm' version getProperty('kotlin.version')
}
}

View File

@@ -0,0 +1,12 @@
module net.woggioni.gbcs {
requires kotlin.stdlib;
requires io.netty.buffer;
requires io.netty.transport;
requires io.netty.codec.http;
requires io.netty.common;
requires io.netty.handler;
requires io.netty.codec;
requires java.logging;
requires org.slf4j;
exports net.woggioni.gbcs;
}

View File

@@ -1,4 +1,4 @@
package net.woggioni.gcs
package net.woggioni.gbcs
import io.netty.buffer.Unpooled
import io.netty.channel.ChannelFutureListener

View File

@@ -1,4 +1,4 @@
package net.woggioni.gcs
package net.woggioni.gbcs
import io.netty.handler.codec.http.HttpRequest

View File

@@ -1,4 +1,4 @@
package net.woggioni.gcs
package net.woggioni.gbcs
import io.netty.bootstrap.ServerBootstrap
import io.netty.buffer.ByteBuf
@@ -9,11 +9,9 @@ import io.netty.channel.ChannelFutureListener
import io.netty.channel.ChannelHandlerContext
import io.netty.channel.ChannelInitializer
import io.netty.channel.ChannelOption
import io.netty.channel.ChannelOutboundHandlerAdapter
import io.netty.channel.ChannelPromise
import io.netty.channel.DefaultFileRegion
import io.netty.channel.EventLoopGroup
import io.netty.channel.FileRegion
import io.netty.channel.SimpleChannelInboundHandler
import io.netty.channel.nio.NioEventLoopGroup
import io.netty.channel.socket.nio.NioServerSocketChannel
@@ -22,7 +20,6 @@ import io.netty.handler.codec.http.DefaultFullHttpResponse
import io.netty.handler.codec.http.DefaultHttpContent
import io.netty.handler.codec.http.DefaultHttpResponse
import io.netty.handler.codec.http.FullHttpRequest
import io.netty.handler.codec.http.FullHttpResponse
import io.netty.handler.codec.http.HttpContentCompressor
import io.netty.handler.codec.http.HttpHeaderNames
import io.netty.handler.codec.http.HttpHeaderValues
@@ -54,19 +51,19 @@ class GradleBuildCacheServer {
internal class HttpChunkContentCompressor(threshold : Int, vararg compressionOptions: CompressionOptions = emptyArray())
: HttpContentCompressor(threshold, *compressionOptions) {
override fun write(ctx: ChannelHandlerContext, msg: Any, promise: ChannelPromise) {
var msg: Any? = msg
if (msg is ByteBuf) {
var message: Any? = msg
if (message is ByteBuf) {
// convert ByteBuf to HttpContent to make it work with compression. This is needed as we use the
// ChunkedWriteHandler to send files when compression is enabled.
val buff = msg
val buff = message
if (buff.isReadable) {
// We only encode non empty buffers, as empty buffers can be used for determining when
// the content has been flushed and it confuses the HttpContentCompressor
// if we let it go
msg = DefaultHttpContent(buff)
message = DefaultHttpContent(buff)
}
}
super.write(ctx, msg, promise)
super.write(ctx, message, promise)
}
}
@@ -267,6 +264,7 @@ class GradleBuildCacheServer {
private const val HTTP_PORT = 8080
@JvmStatic
fun main(args: Array<String>) {
Thread.currentThread().contextClassLoader = GradleBuildCacheServer::class.java.classLoader
GradleBuildCacheServer().run()
}

View File

@@ -1,9 +1,15 @@
package net.woggioni.gcs
package net.woggioni.gbcs
import io.netty.channel.ChannelHandlerContext
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.net.InetSocketAddress
import java.nio.file.Files
import java.nio.file.Path
import java.util.logging.LogManager
inline fun <reified T> T.contextLogger() = LoggerFactory.getLogger(T::class.java)
@@ -105,3 +111,24 @@ inline fun log(log : Logger, ctx : ChannelHandlerContext,
log.loggerMethod(clientAddress + " - " + messageBuilder())
}
}
class LoggingConfig {
init {
val logManager = LogManager.getLogManager()
System.getProperty("log.config.source")?.let withSource@ { source ->
val urls = LoggingConfig::class.java.classLoader.getResources(source)
while(urls.hasMoreElements()) {
val url = urls.nextElement()
url.openStream().use { inputStream ->
logManager.readConfiguration(inputStream)
return@withSource
}
}
Path.of(source).takeIf(Files::exists)
?.let(Files::newInputStream)
?.use(logManager::readConfiguration)
}
}
}

View File

@@ -0,0 +1,8 @@
.level=FINEST
handlers = java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.filter =
java.util.logging.ConsoleHandler.formatter =
java.util.logging.ConsoleHandler.encoding =