[FIXED] Sbt + Spring Boot Keine Autokonfigurationsklassen in META-INF/spring.factories gefunden

Ausgabe

Nach dem Upgrade von Spring Boot 2.4.13 auf 2.7.4 trat dieser Fehler in meiner containerisierten Scala-Anwendung auf (ich verwende Scala 2.12).

java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.
    at org.springframework.util.Assert.notEmpty(Assert.java:470)
    at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getCandidateConfigurations(AutoConfigurationImportSelector.java:185)
    at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getAutoConfigurationEntry(AutoConfigurationImportSelector.java:125)
    at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector$AutoConfigurationGroup.process(AutoConfigurationImportSelector.java:440)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGrouping.getImports(ConfigurationClassParser.java:879)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:809)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:780)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:192)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295)
    at com.eb.data.batch.writer.TermSuccessBatchMainClass$.main(TermSuccessBatch.scala:61)
    at com.eb.data.batch.writer.TermSuccessBatchMainClass.main(TermSuccessBatch.scala)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
    at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:958)
    at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:180)
    at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:203)
    at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:90)
    at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1046)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1055)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Nachdem ich einige Nachforschungen angestellt hatte, fand ich mögliche Lösungen wie das Einfügen eines dieser Plugins in plugins.sbtdie Datei:

addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.2")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.9.11")
addSbtPlugin("org.springframework.boot" % "spring-boot-maven-plugin" % "2.7.4")

Ich bin jedoch nicht in der Lage, die letzten 2 dieser Plugins aufzulösen, aber die Datei enthält andere Plugins, die ordnungsgemäß aufgelöst werden, da ich ein Repository-Konfigurationsproblem verworfen habe. In der Tat kann der erste behoben werden, hat das Problem jedoch nicht behoben. Diese Zeile habe ich auch angehängt build.sbt:

enablePlugins(JavaAppPackaging)
[error] (update) sbt.librarymanagement.ResolveException: Error downloading com.typesafe.sbt:sbt-native-packager;sbtVersion=1.0;scalaVersion=2.12:1.9.11
[error]   Not found
[error]   Not found
[error]   not found: https://repo1.maven.org/maven2/com/typesafe/sbt/sbt-native-packager_2.12_1.0/1.9.11/sbt-native-packager-1.9.11.pom
[error]   not found: /Users/myuser/.ivy2/localcom.typesafe.sbt/sbt-native-packager/scala_2.12/sbt_1.0/1.9.11/ivys/ivy.xml
[error]   unauthorized: https://my-nexus-server/repository/ivy-releases-group/com.typesafe.sbt/sbt-native-packager/scala_2.12/sbt_1.0/1.9.11/ivys/artifact.xml (Sonatype Nexus Repository Manager)
[error]   unauthorized: https://my-nexus-server/repository/public/com/typesafe/sbt/sbt-native-packager_2.12_1.0/1.9.11/sbt-native-packager-1.9.11.pom (Sonatype Nexus Repository Manager)
[error]   not found: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-native-packager/scala_2.12/sbt_1.0/1.9.11/ivys/ivy.xml
[error]   not found: https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbt/sbt-native-packager/scala_2.12/sbt_1.0/1.9.11/ivys/ivy.xml

Die letzten beiden werfen einen nicht autorisierten Fehler in meinem Nexus-Repository aus, aber die .sbt-Anmeldeinformationen sind richtig eingestellt und es ist in der Lage, alle Abhängigkeiten und andere Plugins über den Nexus-Server aufzulösen (ich denke, es ist stattdessen ein Nicht gefunden).

Auch versucht, die Merge-Strategie aus zu modifizieren

lazy val assemblySettings = Seq(
  assembly / assemblyMergeStrategy := {
    case PathList("META-INF", "spring.factories") => MergeStrategy.filterDistinctLines
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    case _                             => MergeStrategy.first
  }
)

zu

lazy val assemblySettings = Seq(
  assembly / assemblyMergeStrategy := {
    case PathList("META-INF", "spring.factories") => MergeStrategy.filterDistinctLines
    case PathList("META-INF", "spring") => MergeStrategy.filterDistinctLines
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    case _                             => MergeStrategy.first
  }
)

da scheint die autokonfiguration auf spring boot 2.7 verschoben worden zu sein und die fehlermeldung besagt, dass versucht wird, sie auch unter META-INF/springEs funktionierte nicht zu finden

Irgendwelche Ideen, um dieses Problem anzugehen?

Lösung

Da die Einstellungen für die automatische Konfiguration im Frühjahr im Frühjahr 2.7 von META-INF/spring.factoriesnach META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.importsverschoben wurden, funktionierte das Ersetzen dieses Pfads in der Zusammenführungsstrategie für sbt build:

  assembly / assemblyMergeStrategy := {
    case PathList("META-INF", "spring.factories") => MergeStrategy.filterDistinctLines
    case PathList("META-INF", "spring", "org.springframework.boot.autoconfigure.AutoConfiguration.imports") => MergeStrategy.filterDistinctLines
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    case _                             => MergeStrategy.first
  }


Beantwortet von –
dhalfageme


Antwort geprüft von –
Mildred Charles (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like