When I assemble the jar and execute it have the following error:
java -Dmicronaut.server.port=17672 -jar dictionary-be-0.1.jar
Message: No bean of type [java.sql.Connection] exists.
* [Connection] requires the presence of a bean of type [javax.sql.DataSource].
* [DataSource] requires the presence of a bean of type [io.micronaut.configuration.jdbc.hikari.DatasourceConfiguration].
* [DatasourceConfiguration] is disabled because:
- Configuration requires entries under the prefix: [datasources.default]
Path Taken: new SecurityFilter(Collection securityRules,Collection authenticationFetchers,SecurityConfiguration securityConfiguration) --> new SecurityFilter(Collection securityRules,[Collection authenticationFetchers],SecurityConfiguration securityConfiguration) --> new BasicAuthAuthenticationFetcher([Authenticator authenticator]) --> new Authenticator(BeanContext beanContext,List reactiveAuthenticationProviders,[List authenticationProviders],List deprecatedAuthenticationProviders,SecurityConfiguration securityConfiguration) --> new AuthenticationProviderUserPassword([UserService userService]) --> new UserService([Connection connection],TransactionOperations transactionManager)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2181)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1328)
at com.dictionary.service.$UserService$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2330)
The error is weird as application.yaml and properties contain these parameters:
datasources.default.url=jdbc:postgresql://localhost:5432/postgres
#datasources.default.url=${JDBC_DATABASE_URL}
datasources.default.username=
datasources.default.password=
datasources.default.db-type=postgres
datasources.default.driver-class-name=org.postgresql.Driver
datasources.default.dialect=POSTGRES
datasources:
default:
driverClassName: org.postgresql.Driver
password: ""
url: jdbc:postgresql://localhost:5432/postgres
username: ""
Switching between files did not help. If I run locally, I can find the message that HikariPool-1 - Starting... however with jar it does not occur.
I have a feeling that the Gradle file is not correct, but I have no clue what exactly. Sorry for the impressive configuration, I was trying different options.
plugins {
java
application
id("org.jetbrains.kotlin.jvm") version "1.9.22"
id("com.google.devtools.ksp") version "1.9.22-1.0.17"
id("io.micronaut.application") version "4.3.2"
id("io.micronaut.test-resources") version "4.3.2"
}
version = "0.1"
group = "com.dictionary"
val kotlinVersion = project.properties.get("kotlinVersion")
repositories {
mavenCentral()
}
dependencies {
ksp("io.micronaut.data:micronaut-data-processor")
ksp("io.micronaut:micronaut-http-validation")
ksp("io.micronaut.serde:micronaut-serde-processor")
ksp("io.micronaut.security:micronaut-security-annotations")
annotationProcessor("io.micronaut.validation:micronaut-validation-processor")
implementation("io.micronaut.validation:micronaut-validation")
implementation("io.micronaut.data:micronaut-data-jdbc")
compileOnly("io.micronaut.data:micronaut-data-jdbc")
runtimeOnly("io.micronaut.data:micronaut-data-jdbc")
implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
implementation("io.micronaut.reactor:micronaut-reactor-http-client")
annotationProcessor("io.micronaut.data:micronaut-data-processor:1.0.2")
implementation("io.micronaut.serde:micronaut-serde-jackson")
runtimeOnly("io.micronaut.sql:micronaut-jdbc-hikari")
compileOnly("io.micronaut.sql:micronaut-jdbc-hikari")
implementation("io.micronaut.sql:micronaut-jdbc-hikari")
implementation("io.micronaut.security:micronaut-security-jwt")
annotationProcessor("io.micronaut.data:micronaut-data-processor")
implementation("io.micronaut.data:micronaut-data-tx-hibernate")
implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
runtimeOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
compileOnly("io.micronaut:micronaut-http-client")
runtimeOnly("ch.qos.logback:logback-classic")
implementation("io.micronaut.data:micronaut-data-hibernate-reactive")
implementation("org.slf4j:slf4j-api:2.0.12")
runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
runtimeOnly("org.postgresql:postgresql")
runtimeOnly("org.yaml:snakeyaml")
testImplementation("io.micronaut:micronaut-http-client")
implementation("com.amazonaws:aws-java-sdk:1.12.671")
}
application {
mainClass.set("com.dictionary.ApplicationKt")
}
java {
sourceCompatibility = JavaVersion.toVersion("17")
targetCompatibility = JavaVersion.toVersion("17")
}
tasks.withType<Jar> {
manifest {
attributes["Main-Class"] = "com.dictionary.ApplicationKt"
}
isZip64 = true
// To avoid the duplicate handling strategy error
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
// To add all of the dependencies otherwise a "NoClassDefFoundError" error
from(sourceSets.main.get().output)
from({
isZip64 = true
configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
})
}
tasks {
val stage by registering {
dependsOn(build, clean)
}
build {
mustRunAfter(clean)
}
distTar {
enabled = false
}
distZip {
enabled = false
}
dockerBuild {
enabled = false
}
dockerBuildNative {
enabled = false
}
dockerfile {
enabled = false
}
dockerfileNative {
enabled = false
}
buildLayers {
enabled = false
}
runnerJar {
enabled = false
}
nativeBuild {
enabled = false
}
nativeCompileClasspathJar {
enabled = false
}
}
graalvmNative.toolchainDetection.set(false)
micronaut {
runtime("netty")
testRuntime("junit5")
processing {
incremental(true)
annotations("com.dictionary.*")
}
testResources {
additionalModules.add("jdbc-postgresql")
}
}