add graalvm native image configures

This commit is contained in:
dalbodeule 2024-06-12 14:57:30 +09:00
parent 5c8ef4a2ed
commit bcf0cc6c8d
No known key found for this signature in database
GPG Key ID: EFA860D069C9FA65
17 changed files with 2664 additions and 32 deletions

17
.idea/dataSources.xml generated Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="@localhost" uuid="90f8ee11-600e-4155-a316-e8062c7c828b">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://localhost:3306</jdbc-url>
<jdbc-additional-properties>
<property name="com.intellij.clouds.kubernetes.db.host.port" />
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
<property name="com.intellij.clouds.kubernetes.db.container.port" />
</jdbc-additional-properties>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

View File

@ -6,4 +6,16 @@
<sourceFolder url="file://$MODULE_DIR$/../../src/main/resources" type="java-resource" />
</content>
</component>
<component name="FacetManager">
<facet type="jpa" name="JPA">
<configuration>
<setting name="validation-enabled" value="true" />
<setting name="provider-name" value="Hibernate" />
<datasource-mapping>
<factory-entry name="chzzk_bot.main" value="90f8ee11-600e-4155-a316-e8062c7c828b" />
</datasource-mapping>
<naming-strategy-map />
</configuration>
</facet>
</component>
</module>

6
.idea/sqldialects.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="PROJECT" dialect="MariaDB" />
</component>
</project>

View File

@ -1,9 +1,13 @@
import org.jetbrains.kotlin.gradle.targets.native.NativeCompilerOptions
plugins {
val kotlinVersion = "2.0.0"
id("java")
id("application")
kotlin("jvm") version kotlinVersion
kotlin("plugin.jpa") version kotlinVersion
id("org.hibernate.orm") version "6.5.2.Final"
id("org.graalvm.buildtools.native") version "0.10.2"
}
@ -58,9 +62,23 @@ dependencies {
implementation("io.github.R2turnTrue:chzzk4j:0.0.7")
implementation("ch.qos.logback:logback-classic:1.4.14")
// https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core
implementation("org.hibernate.orm:hibernate-core:6.5.2.Final")
implementation("org.hibernate:hibernate-hikaricp:6.5.2.Final")
implementation("org.hibernate:hibernate-graalvm:6.5.2.Final")
// https://mvnrepository.com/artifact/com.zaxxer/HikariCP
implementation("com.zaxxer:HikariCP:5.1.0")
// https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0-RC")
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-reflect
implementation("org.jetbrains.kotlin:kotlin-reflect:2.0.0")
// https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client
implementation("org.mariadb.jdbc:mariadb-java-client:3.4.0")
implementation("io.github.cdimascio:dotenv-kotlin:6.4.1")
kotlin("stdlib-jdk8")
kotlin("stdlib")
}
tasks.withType<Jar> {

Binary file not shown.

View File

@ -2,5 +2,6 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

31
gradlew vendored Normal file → Executable file
View File

@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@ -83,10 +83,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -133,10 +131,13 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \

20
gradlew.bat vendored
View File

@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail

View File

@ -1,2 +1,6 @@
DISCORD_TOKEN=
GUILD_ID
GUILD_ID=
DB_URL=jdbc:mariadb://localhost:3306/chzzk
DB_USER=chzzk
DB_PASS=chzzk
RUN_AGENT=false

View File

@ -1,6 +0,0 @@
[
{
"name": "net.dv8tion.jda.api.entities.Guild[]",
"unsafeAllocated": true
}
]

View File

@ -0,0 +1,39 @@
package space.mori.chzzk_bot
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import io.github.cdimascio.dotenv.dotenv
import org.hibernate.SessionFactory
import org.hibernate.boot.registry.StandardServiceRegistryBuilder
import org.hibernate.cfg.Configuration
import org.hibernate.service.ServiceRegistry
import space.mori.chzzk_bot.discord.User
object Database {
private val dotenv = dotenv()
val configuration = Configuration().apply {
addAnnotatedClass(User::class.java)
setProperty("hibernate.dialect", "org.hibernate.dialect.MariaDBDialect")
setProperty("hibernate.show_sql", "true")
setProperty("hibernate.format_sql", "true")
setProperty("hibernate.hbm2ddl.auto", "update")
setProperty("hibernate.hbm2ddl.jdbc", "update")
setProperty("hibernate.bytecode.use-bytebuddy", "false")
// HikariCP를 사용하도록 설정
setProperty("hibernate.connection.provider_class", "org.hibernate.hikaricp.internal.HikariCPConnectionProvider")
setProperty("hibernate.hikari.dataSourceClassName", "org.mariadb.jdbc.MariaDbDataSource")
setProperty("hibernate.hikari.dataSource.url", dotenv["DB_URL"])
setProperty("hibernate.hikari.dataSource.user", dotenv["DB_USER"])
setProperty("hibernate.hikari.dataSource.password", dotenv["DB_PASS"])
setProperty("hibernate.hikari.maximumPoolSize", "10")
}
private val serviceRegistry: ServiceRegistry = StandardServiceRegistryBuilder()
.applySettings(configuration.properties)
.build()
val sessionFactory: SessionFactory = configuration.buildSessionFactory(serviceRegistry)
}

View File

@ -1,15 +1,26 @@
package space.mori.chzzk_bot
import io.github.cdimascio.dotenv.dotenv
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import space.mori.chzzk_bot.discord.Discord
import java.util.concurrent.TimeUnit
val dotenv = dotenv()
val logger: Logger = LoggerFactory.getLogger("main")
fun main(args: Array<String>) {
val discord = Discord()
Database
discord.enable()
if(dotenv.get("RUN_AGENT", "false").toBoolean()) {
runBlocking {
delay(TimeUnit.SECONDS.toMillis(10))
discord.disable()
}
}
}

View File

@ -0,0 +1,19 @@
package space.mori.chzzk_bot.discord
import jakarta.persistence.*
@Entity
@Table(name = "users")
data class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long?,
@Column(length = 255)
val username: String,
@Column(length = 64)
val token: String,
val discord: Long
)

View File

@ -0,0 +1,21 @@
package space.mori.chzzk_bot.services
import space.mori.chzzk_bot.Database
import space.mori.chzzk_bot.discord.User
class UserService {
fun saveUser(user: User) {
val session = Database.sessionFactory.openSession()
session.beginTransaction()
session.persist(user)
session.transaction.commit()
session.close()
}
fun getUser(id: Long): User? {
val session = Database.sessionFactory.openSession()
val user = session.get(User::class.java, id)
session.close()
return user
}
}

View File

@ -1,2 +1,47 @@
[
{
"interfaces":["java.sql.Connection"]
},
{
"interfaces":["net.bytebuddy.description.method.MethodDescription$InDefinedShape$AbstractBase$Executable"]
},
{
"interfaces":["net.bytebuddy.description.method.ParameterDescription$ForLoadedParameter$Parameter"]
},
{
"interfaces":["net.bytebuddy.description.method.ParameterList$ForLoadedExecutable$Executable"]
},
{
"interfaces":["net.bytebuddy.description.type.TypeDefinition$Sort$AnnotatedType"]
},
{
"interfaces":["net.bytebuddy.description.type.TypeDescription"]
},
{
"interfaces":["net.bytebuddy.description.type.TypeDescription$ForLoadedType$Dispatcher"]
},
{
"interfaces":["net.bytebuddy.description.type.TypeDescription$Generic"]
},
{
"interfaces":["net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedExecutableParameterType$Dispatcher"]
},
{
"interfaces":["net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$Delegator$ForLoadedMethodReturnType$Dispatcher"]
},
{
"interfaces":["net.bytebuddy.description.type.TypeDescription$Generic$AnnotationReader$ForComponentType$AnnotatedParameterizedType"]
},
{
"interfaces":["net.bytebuddy.dynamic.loading.ClassInjector$UsingLookup$MethodHandles"]
},
{
"interfaces":["net.bytebuddy.dynamic.loading.ClassInjector$UsingLookup$MethodHandles$Lookup"]
},
{
"interfaces":["net.bytebuddy.utility.JavaModule$Module"]
},
{
"interfaces":["net.bytebuddy.utility.JavaModule$Resolver"]
}
]

File diff suppressed because it is too large Load Diff

View File

@ -2,14 +2,76 @@
"resources":{
"includes":[{
"pattern":"\\QMETA-INF/services/ch.qos.logback.classic.spi.Configurator\\E"
}, {
"pattern":"\\QMETA-INF/services/com.fasterxml.jackson.databind.Module\\E"
}, {
"pattern":"\\QMETA-INF/services/jakarta.validation.spi.ValidationProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/jakarta.validation.valueextraction.ValueExtractor\\E"
}, {
"pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E"
}, {
"pattern":"\\QMETA-INF/services/java.net.spi.InetAddressResolverProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/java.net.spi.URLStreamHandlerProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/java.sql.Driver\\E"
}, {
"pattern":"\\QMETA-INF/services/java.time.zone.ZoneRulesProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/javax.xml.stream.XMLEventFactory\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.model.FunctionContributor\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.model.TypeContributor\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.registry.selector.StrategyRegistrationProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.registry.selector.spi.DialectSelector\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.spi.AdditionalJaxbMappingProducer\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.spi.AdditionalMappingContributor\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.spi.MetadataBuilderFactory\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.spi.MetadataBuilderInitializer\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.spi.MetadataContributor\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.spi.MetadataSourcesContributor\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.boot.spi.SessionFactoryBuilderFactory\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.bytecode.spi.BytecodeProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.engine.jdbc.dialect.spi.DialectResolver\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.event.spi.EventEngineContributor\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.event.spi.EventManager\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.id.factory.spi.GenerationTypeStrategyRegistration\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.integrator.spi.Integrator\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.query.criteria.spi.CriteriaBuilderExtension\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.service.spi.ServiceContributor\\E"
}, {
"pattern":"\\QMETA-INF/services/org.hibernate.service.spi.SessionFactoryServiceContributor\\E"
}, {
"pattern":"\\QMETA-INF/services/org.jboss.logging.LoggerProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/org.mariadb.jdbc.plugin.Codec\\E"
}, {
"pattern":"\\QMETA-INF/services/org.slf4j.spi.SLF4JServiceProvider\\E"
}, {
"pattern":"\\QMETA-INF/validation.xml\\E"
}, {
"pattern":"\\Qhibernate.properties\\E"
}, {
"pattern":"\\Qlogback-test.scmo\\E"
}, {
@ -18,10 +80,44 @@
"pattern":"\\Qlogback.scmo\\E"
}, {
"pattern":"\\Qlogback.xml\\E"
}, {
"pattern":"\\Qmariadb.properties\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$AreFieldsDirty.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$AreFieldsDirtyWithoutCollections.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$ClearDirtyAttributes.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$ClearDirtyAttributesWithoutCollections.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$ClearOwner.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$GetCollectionTrackerWithoutCollections.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$GetDirtyAttributes.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$GetDirtyAttributesWithoutCollections.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$InitializeLazyAttributeLoadingInterceptor.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$SetOwner.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$SuspendDirtyTracking.class\\E"
}, {
"pattern":"\\Qorg/hibernate/bytecode/enhance/internal/bytebuddy/CodeTemplates$TrackChange.class\\E"
}, {
"pattern":"\\Qorg/hibernate/hibernate-configuration-3.0.dtd\\E"
}, {
"pattern":"\\Qorg/hibernate/hibernate-mapping-3.0.dtd\\E"
}, {
"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfc.nrm\\E"
}, {
"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfkc.nrm\\E"
}, {
"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/uprops.icu\\E"
}, {
"pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E"
}]},
"bundles":[]
}