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

View File

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

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists 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 zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

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

View File

@@ -1,9 +1,15 @@
package net.woggioni.gcs package net.woggioni.gbcs
import io.netty.channel.ChannelHandlerContext import io.netty.channel.ChannelHandlerContext
import org.slf4j.Logger import org.slf4j.Logger
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.net.InetSocketAddress 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) 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()) 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 =