switch to envelope + jul
This commit is contained in:
35
build.gradle
35
build.gradle
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -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
|
||||||
|
@@ -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')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
12
src/main/java/module-info.java
Normal file
12
src/main/java/module-info.java
Normal 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;
|
||||||
|
}
|
@@ -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
|
@@ -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
|
||||||
|
|
@@ -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()
|
||||||
}
|
}
|
||||||
|
|
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
8
src/main/resources/logging.properties
Normal file
8
src/main/resources/logging.properties
Normal 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 =
|
Reference in New Issue
Block a user