Поставщик услуг работает вне файла jar, но не внутри файла jarJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Поставщик услуг работает вне файла jar, но не внутри файла jar

Сообщение Anonymous »


import java.util.ServiceLoader

interface A

data object B : A {
@JvmStatic
fun provider(): A = this
}

fun main() {
println(ServiceLoader.load(A::class.java).toList())
}

эта программа отлично работает в автономном режиме:
java.exe -p ; -m testJARSPI/my.program.MainKt
но выдает ошибку при запуске в jar-файле:
java -jar

сообщение:
Exception in thread "main" java.util.ServiceConfigurationError: my.program.A: my.program.B Unable to get public no-arg constructor
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
at java.base/java.util.ServiceLoader.getConstructor(ServiceLoader.java:679)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1240)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1273)
at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309)
at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393)
at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1295)
at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1328)
at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1319)
at my.program.MainKt.main(Main.kt:15)
at my.program.MainKt.main(Main.kt)
Caused by: java.lang.NoSuchMethodException: my.program.B.()
at java.base/java.lang.Class.getConstructor0(Class.java:3641)
at java.base/java.lang.Class.getConstructor(Class.java:2324)
at java.base/java.util.ServiceLoader$1.run(ServiceLoader.java:666)
at java.base/java.util.ServiceLoader$1.run(ServiceLoader.java:663)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at java.base/java.util.ServiceLoader.getConstructor(ServiceLoader.java:674)
... 9 more

Я не могу найти, какое изменение нарушается внутри файла jar
Примечание: файл MANIFEST.MF, службы
code> и модуль-info.java настроен правильно.
Собран с использованием IntelliJ: создать JAR из модуля -> извлечь в целевой JAR
протестировано с помощью jdk:
  • open-jdk 22
  • open-jdk 19 (показано трассировка стека)
  • исправление 22
пробовал перейти на не окончательный элемент, но ошибка все та же< /p>
data object B : A {
@JvmStatic
@Suppress("NON_FINAL_MEMBER_IN_OBJECT")
open // remove final modifier
fun provider(): A = this
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... a-jar-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»