Spring Spring Applikation mit module-info

KonradN

Super-Moderator
Mitarbeiter
Ich habe bisher die ganzen Java EE / Spring Dinge mit Java 8 machen dürfen, aber ich habe jetzt ein kleines Projekt für mich selbst gestartet und da greife ich auf Java 17 zurück.

Also ganz einfacher Aufbau: Eine Entity, ein Repository Interface, das von CrudRepository erbt, Unit Test.... halt wirklich alles ganz 08/15.

Nur eben renne ich immer in den Fehler: "org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'xxxx' available.

Sobald ich die module-info.java heraus nehme, läuft es problemlos. Mit module-info.java kommt es zu diesem Fehler. Teilweise gab es Meldungen dass eine Spring Klasse in einem unnamed Modul war - das habe ich alle bereinigt, indem ich das notwendige Modul ebenfalls per requires eingebunden habe.
Alle meine Namespaces gebe ich mit exports und opens an.

Und irgendwie komme ich da nicht wirklich weiter. Man findet viel a.la @Repository hinzufügen (was nicht notwendig ist, denn es reicht, von CrudRepository abzuleiten) und wie gesagt: alles 08/15 und funktioniert problemlos, wenn die module-info.java gelöscht wird. Der große Unterschied dabei ist ja, dass bei dem unnamed modul ein requires auf alle Module im Classpath gesetzt ist. Somit wird da irgendwas fehlen, aber ich habe da mit meinen Versuchen nicht wirklich was erreicht.

Meine aktuelle module-info.java:
Code:
module test.server {
    requires java.annotation;
    requires java.persistence;
    requires lombok;
    requires org.slf4j;
    requires spring.beans;
    requires spring.boot;
    requires spring.boot.autoconfigure;
    requires spring.context;
    requires spring.core;
    requires spring.data.commons;
    requires spring.data.jpa;
    requires spring.web;

    exports de.kneitzel.server;
    opens de.kneitzel.server;
    exports de.kneitzel.server.entities;
    opens de.kneitzel.server.entities;
    exports de.kneitzel.server.repositories;
    opens de.kneitzel.server.repositories;
}

Repository (noch mit @Repository) wäre einfach:
Java:
package de.kneitzel.server.repositories;

import de.kneitzel.server.entities.TestEntity;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;

/**
 * Repository to load and save ObjectAttributes instances.
 */
@Repository
public interface TestEntityRepository extends CrudRepository<TestEntity, Long> {
    Optional<TestEntity> findById(long id);
}

Die Abhängigkeiten sind die üblichen Verdächtigen (spring.boot.version ist 2.7.0:
Code:
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
      <version>${spring.boot.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
      <version>${spring.boot.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
      <version>${spring.boot.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
      <version>${spring.boot.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>${spring.boot.version}</version>
    </dependency>
    <dependency>
      <groupId>org.thymeleaf.extras</groupId>
      <artifactId>thymeleaf-extras-springsecurity5</artifactId>
      <version>${thymeleaf.security.version}</version>
    </dependency>

Vielleicht hat ja jemand eine Idee, denn mir gehen gerade die Ideen aus ...
 

KonradN

Super-Moderator
Mitarbeiter
Bei den Tests läuft die Spring Applikation selbst ohne Fehler hoch und dann kann er das Repository nicht finden.
 

KonradN

Super-Moderator
Mitarbeiter
Warum Module überhaupt mit Spring? Wird das überhaupt unterstützt?
Das ist eine sehr gute Frage - Spring Initializr erzeugt Projekte ohne module-info.java.

Bei anderen Projekten mit Java 11 und 17 war ich gewohnt, auch mit Modulen zu arbeiten, daher hatte ich das halt auch mal dazu genommen. Und da ich dann auch prompt bei der Suche Blog Beiträge wie https://developer.okta.com/blog/2020/07/27/spring-boot-using-java-modules gefunden hatte, dachte ich eigentlich, dass es gehen müsste.

Vor allem müsste es doch auf SO viele Beiträge geben mit Leuten, die ebenso in diese Problematik getappt sind aber irgendwie habe bei der Problematik immer nur die "üblichen" Antworten gefunden, die eben nicht auf diese Modul-Problematik eingehen.

Ich werde auf jeden Fall erst einmal ohne die module-info.java weiter machen, aber vielleicht hat ja noch jemand eine Idee.

Falls jemand was zum spielen will: Das folgende ZIP enthält einfach ein Spring Initializr Projekt mit Test Entity und Repository und einem sehr einfachen Unit Test.
 

Anhänge

  • server.zip
    70,8 KB · Aufrufe: 0

sascha-sphw

Top Contributor
Was versprichst Du Dir davon? Mir fällt gerade nichts ein, was das verbessern würde. Bei Libs leuchtet es mir ein. Gut ich muss aber dazu sagen, dass fast alle meine Spring Anwendungen zum Schluß im Container laufen.
 

KonradN

Super-Moderator
Mitarbeiter
Was versprichst Du Dir davon?
Das ist eine gute Frage. Ich bin erst einmal rein aus Gewohnheit hin gegangen und habe das entsprechend benutzt. Ich erinnere mich an Probleme mit JLink / JPackage bei Software ohne Modulsystem (Wobei das nicht meine Projekte waren sondern Projekte bei denen ich dann nur bei der Problemlösung unterstützt hatte).

Prinzipiell ist die Lösung, die ja auch @Flown schon vorgeschlagen hat, durchaus akzeptabel: Weg mit der blöden module-info.java. Man bekommt vom Initializr ja ein Projekt ohne Module - also warum sollte man das überhaupt nutzen wollen.

Da bin ich also (Jetzt mit dem aktuellen Projekt) durchaus nicht dagegen - ich habe keinen Grund in der Form, dass dann irgendwas nicht funktioniert.

Reines Gedankenspiel:
Ich habe aber Spring Komponenten auch schon in "Client" Applikationen genutzt. (Die war halt doch deutlich größer wie ein Hello World und ich wollte eine Dependency Injection und es gab eine Idee, dass man da auch noch parallel einen kleinen Server öffnen könnte. Ist etwas komplexer - da ging es um eine Batch Bearbeitung von Requests und es gab auch schon die Idee, dass man diese Schnittstelle direkt anbieten könnte und so. Da hat man sozusagen optional auch direkt mal sowas als PoC angedacht.)

Ein Problem wäre ansonsten recht schnell da, sobald man halt ein "opens" bräuchte. Typisches Beispiel: FXMLLoader, der den Controller analysieren will. Package vom Controller müssen da geöffnet werden - da reicht das "requires / exports everything" nicht.

Den Fall habe ich nicht und das wird bei dem Projekt jetzt von mir wohl auch kaum auftreten. Daher ist das derzeit eine rein "akademische Frage". Und ich muss gestehen, dass ich da schlicht nicht tief genug in den Internas vom Spring Framework drin bin. (Das ist sozusagen für mich "eine große schwarze Kiste mit zwei Löchern ... durch das eine geht der Dampf rein und bei dem anderen wieder raus." - Film Die Feuerzangenbowle)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KonradN Schwachstelle Spring Security: cve-2024-22257 Allgemeines EE 0
D Spring, Jakarta... Unterschiede Allgemeines EE 5
KonradN Schwachstelle Spring Framework Allgemeines EE 0
Oneixee5 JSON für Spring Boot Endpunkte erzeugen Allgemeines EE 8
KonradN Spring Schwachstelle im Spring Framework (5 und 6) Allgemeines EE 1
KonradN Spring 6 verfügbar Allgemeines EE 0
D Spring 3 vs. Java EE 6 Allgemeines EE 33
R Wie Spring in Eclipse Galileo installieren? Allgemeines EE 5
S JSTL / Spring Webflow Frage Allgemeines EE 2
K adding spring to struts2 - Spring2 Allgemeines EE 7
S Grundverständnis Spring MVC Allgemeines EE 3
M Spring: Bean als Webservice freigeben Allgemeines EE 9
ARadauer midle tier spring rmi remoting - security Allgemeines EE 2
D Erst Spring oder erst Hibernate lernen? Allgemeines EE 2
D Java EE vs. Spring/Hibernate Allgemeines EE 26
byte Remote Lazy Loading mit Spring und Hibernate Allgemeines EE 5
G JSF, Hibernate, Spring --> Struktur Allgemeines EE 2
S allgemeine Frage zu Spring (AOP) Allgemeines EE 2
A Spring und Swing Allgemeines EE 2
B Spring: Verz. "images" in Web-INF über URL verfügb Allgemeines EE 5
S JSF Navigation - Alternative zu Spring Webflow Allgemeines EE 6
W Spring mit JSF und Facelets? Allgemeines EE 1
Ö Spring, Probleme mit FlowScope und HttpServletRequest Allgemeines EE 2
netspy Struts, Spring oder ... ? Allgemeines EE 5
Azemaria JSF: Problem bei der einfachsten Applikation Allgemeines EE 2
black swan Einfacher Weg, Applikation per Web zu steuern Allgemeines EE 1
S Aufruf eines EJBs aus einer nativen Java-Applikation Allgemeines EE 1
R Web-Applikation mit GWT- und Android-Client Allgemeines EE 0
Y JBoss 7 - wie kann ich das logging meiner Applikation am JBoss konfigurieren Allgemeines EE 3
R Konzeption Business Applikation Allgemeines EE 6
J von einer Standalone zur Web Applikation Allgemeines EE 6
B Welchen Applikation-Server verwendet ihr? Allgemeines EE 6
R Applikation (root.tld/app) auf domain (app.tld/) mappen Allgemeines EE 2
I JBOSS IDE EJB 3.0 Servlets JSP Applikation --> JSF sinnvo Allgemeines EE 2
S Permanentbetrieb einer Applikation - Anfängerfrage Allgemeines EE 10
K Design einer J2EE applikation? Allgemeines EE 2
K refactoring: java applikation fürs web Allgemeines EE 3
J Applikation + JSP Allgemeines EE 2
M Komplexe Applikation Allgemeines EE 11
G Tomcat-Applikation lässt sich nicht mehr starten Allgemeines EE 3
M Zeitgesteuertes Ereignis in einer dynamic web module Anwendung (eclipse) Allgemeines EE 3
T The server does not support version 3.0 of the J2EE Web module specification. Allgemeines EE 6
N Dynamic Web Module Version ändern? Allgemeines EE 2

Ähnliche Java Themen

Neue Themen


Oben