J'utilise le JDK 11. Mon projet a commencé comme un projet Spring Boot avec persistance, et j'ai d'abord eu toutes les classes de données câblées et couvertes par des tests. Maintenant, je veux utiliser JavaFX pour l'interface graphique, ce qui signifie commencer à utiliser le système de modules Java. L'application (squelette de code ci-dessous) démarre à moitié mais s'interrompt à cause de la pile d'exceptions suivante :
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.jpa-org.springframework.boot.autoconfigure.orm.jpa.JpaProperties': Lookup method resolution failed
Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.boot.autoconfigure.orm.jpa.JpaProperties] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@6c3708b3]
Caused by: java.lang.NoClassDefFoundError: javax/sql/DataSource
Caused by: java.lang.ClassNotFoundException: javax.sql.DataSource
L'information sur le module ressemble actuellement à ceci :
requires java.persistence;
requires javafx.controls;
requires spring.boot;
requires spring.boot.autoconfigure;
requires spring.context;
requires spring.core;
exports mypackage.app;
opens mypackage.app;
Et voici la source Java (légèrement rétrécie) de l'application principale :
package mypackage.app;
@SpringBootApplication
public class MyApplication extends Application {
private static String[] arguments;
private ConfigurableApplicationContext applicationContext;
public static void main(String[] args) {
arguments = args;
launch(args);
}
@Override
public void init() throws Exception {
applicationContext = SpringApplication.run(MyApplication.class, arguments);
}
@Override
public void start(Stage stage) throws Exception {
var label = new Label("xyz");
var scene = new Scene(new StackPane(label), 640, 480);
stage.setScene(scene);
stage.show();
}
@Override
public void stop() {
applicationContext.stop();
}
}
Edit.
Ajout d'un requires java.sql;
à l'info module conduit à une pile différente d'exceptions, reproduite ici :
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed
javax.persistence.PersistenceException: Unable to resolve persistence unit root URL
java.io.FileNotFoundException: class path resource [] cannot be resolved to URL because it does not exist
Edit.
Comme indiqué ailleurs en ajoutant le java.xml.bind
La dépendance a réglé le problème de l'URL racine de l'unité de persistance, pour le remplacer par une nouvelle pile d'exceptions :
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed
java.lang.NoClassDefFoundError: net/bytebuddy/matcher/ElementMatchers
java.lang.ClassNotFoundException: net.bytebuddy.matcher.ElementMatchers