IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Spring jar hell


Sujet :

Spring Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut Spring jar hell
    Bonjour,

    Dans les années 2000, la programmation en C++ Windows et toutes les DLL qui étaient utilisées à cette fin avaient donné naissance au "DLL Hell" qui exprimait bien ce qui se passait : les versions de DLL en ligne lors de l'exécution d'un programme n'étaient jamais toutes exactement de la version attendue.

    Quinze ans plus tard, Spring renoue avec ceci, mais par le biais des jars afin de proposer une variante de ce problème.

    J'ai choisi un Framework Spring 4.1.7-RELEASE.
    Au cours de mon développement, j'ai été amené à ajouter spring-security 4.0.4.RELEASE pour vite me rendre compte qu'il était prévu pour utiliser les composants spring-aop et spring-beans en version 4.2.5.RELEASE, trop en avance, faisant planter l'application sur des NoSuchMethodError.
    Mais cela, je ne m'en suis pas aperçu tout de suite. Le bom spring-framework 4.1.7.RELEASE déclaré dans mon POM, substituait d'autorité les jars en 4.1.7.RELEASE, rendant la détection de ce problème difficile.

    Alors, avant de remettre ce BOM en place, je redescendu doucement de version de spring-security, jusqu'à la spring-security 4.0.2.RELEASE qui m'amène les spring-aop et spring-beans en 4.1.6.RELEASE, et cela fonctionne mieux.
    Parce que la 4.1.6.RELEASE n'est pas trop loin de la 4.1.7.RELEASE.

    De la même manière, spring-data 1.8.4 a l'air de bien s'entendre avec spring-data-jpa 1.9.4.RELEASE (il ne fonctionne pas avec spring-data-jpa 1.8.4.RELEASE allez savoir pourquoi...), tout en remarquant dans sa compilation qu'il aurait préféré qu'un module spring-oxm 4.1.9.RELEASE l'accompagne.
    En ce moment, je suis entrain de descendre à la version spring-data-jpa 1.9.2.RELEASE pour voir si elle se rapproche de la version oxm 4.1.7.RELEASE, mais ce n'est pas encore le cas : je vais voir ce que je peux trouver de plus proche de la 4.1.7.RELEASE.


    Il manque une sorte de méta BOM à Spring.

    Comment faites-vous pour établir qu'avec
    Spring framework 4.1.7.RELEASE, il faut :
    Spring security 4.0.2.RELEASE
    Spring data 1.8.4.RELEASE
    Spring-data-jpa 1.9.2.RELEASE
    conjointement,

    Même question sous forme de jeu (pas drôle comme jeu, je le sais bien...) :
    Si je décide arbitrairement de passer à la version spring framework 4.2.3.RELEASE,
    saurez-vous trouver les versions de spring-security, spring-data et spring-data-jpa qui vont s'accorder avec ?

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Je vais jouer au jeu:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
     
    	<groupId>com.test</groupId>
    	<artifactId>andry</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
     
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>io.spring.platform</groupId>
    				<artifactId>platform-bom</artifactId>
    				<version>1.1.5.RELEASE</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
     
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.data</groupId>
    			<artifactId>spring-data-jpa</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.security</groupId>
    			<artifactId>spring-security-web</artifactId>
    		</dependency>
    	</dependencies>
     
     
    </project>

    Tu as utilisé spring-framework-bom, qui lui se limite à spring-framework, par contre io.spring.platform s'étend à tous les projets de spring.
    http://platform.spring.io/platform/

    A+.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut
    Voilà une bonne nouvelle ! C'est peut-être ce meta-bom que j'attendais.

    En l'ouvrant, je vois qu'il a pour parent un spring-boot-parent, et pour enfants des modules spring-integration-xxx qui se déclinent eux-mêmes en d'autres choses qui aboutissent aux modules spring que j'attends.
    C'est devenu si complexe, Spring. Je n'en reviens pas.
    C'est pour cela qu'il faut des gens comme toi, qui savent où est la bonne info pour s'en sortir. Je te remercie. Je vais expérimenter cela.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour, je suis débutant sur Spring et consterné par le difficulté et donc le manque de flexibilité du système comparé à AngularJs et même Javascript.
    Je souhaiterais savoir si je dois abandonner totalement cette technologie ou pas.
    Les tutos que je fais marchent une fois sur 10, que ce soit en anglair ou en Françaisµ, les messages d'erreur sont incompréhensibles.
    Je prie tous les jours que cette techno disparraisse pour toujours maintenant ! J'arrète pas de m'énever tout ça pour afficher un "hello world" ça marche pas. Eclipse est encore en anlgo saxon, on ne piffre rien des menus qui changent constamment. Le succés de ce truc est juste du aux écoles d'ingnieur qui l'apprennent de force. Je parie que les applis réalisées avec cette techno ne sont pas flexibles du tout, et je suis sur que la plupart des offres d'emploi Java ee sont factices, ce n'est pas possible, n'importe quoi verrait de suite que c'est alambiqué et tordu, j'en ait trop marre je pousse un coup de gueule, moi qui voulait monter en compétence sur cette techno, je me heurte à un mur. AngularJs et ses tonnes de plug ins sont 1 milliard de fois plus simple à comprendre et 10 000 fois plus flexibles que ce veixu truc sorti des années 90, obsolète à fond, pourtant j'adore le MVC mais ce truc fait tout pour me dégouter rien ne marche je hais Je vais encore essayer un peu, mais franchement je suis dégouté à fond vraiment ! Je vais passer en full Js AngularJs, je m'en fout que il y a pas d'offre d'emploi tant pis ! pourquoi s'auto flageller avec des technos obsolètes et incompréhensibles ça freine tout.
    Exemple :
    Je tente désepérements d'afficher un HELLO WORLD avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package com.tutorialspoint;
     
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
     
    public class MainApp {
       public static void main(String[] args) {
          ApplicationContext context = 
                 new ClassPathXmlApplicationContext("Beans.xml");
     
          HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
     
          obj.getMessage();
       }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package com.tutorialspoint;
     
    public class HelloWorld {
       private String message;
     
       public void setMessage(String message){
          this.message  = message;
       }
     
       public void getMessage(){
          System.out.println("Your Message : " + message);
       }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
     
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
     
       <bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
           <property name="message" value="Hello World!"/>
       </bean>
     
    </beans>
    et bien rien du tout j'ai un message d'erreur totalement incompréhensible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory ;
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    Qui soit disant dit qu'il manque une classe ... ET si le job de dévelopeur c'est de dépanner le logiciel de développemtn en lui même faut le dire, en attendant en javascript ou en html 5 et angular ça ferait 20 ans que j'aurais affiché mon hello world, truc à la ... obsolète des années 90 f**, lanage de m... sponsorisé par les écoles, totlameent obsolète f*** pourtant j'adore le MVC je suis dégouté Pas ettonant que y'a que des apps anglo saxonnes qui sortent sules eux peuvent comprendre un truc tordu en leur langage

    Je continue quand même à essayer ou alors struts mais j'ai vraiment la haine ou la rage je sais pas pourquoi

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    alors
    1) bonjour, bienvenue sur le forum, en général quand on a une question, on poste un nouveau sujet, on ne vole pas le sujet de quelqu'un d'autre
    2) si tu trouve ce message d'erreur moins compréhensible que ceux qui sortent d'angular-js, je ne sais pas quelle drogue tu prend, mais j'aimerais bien l'avoir pour comprendre les message qu'angular-js me chie régulièrement
    3) si tu as envie de grogner et râler plutot que de lire la doc et le message d'erreur, je ne peut pas t'aider. Pas possible que tu aie ce message d'erreur si tu suis le quick-start de spring, qui en 4 lignes maven te télécharge toutes les dépendances du projet, ce que visiblement tu as oublié de faire puisque tu n'a pas téléchargé / dezzipé / ajouté à ton classpath commons-logging. Le progiciel bien que pas parfait n'a aucun problème là. Le problème il est sur la chaise.

    Donc ton problème il est simple: t'as oublié des dépendances dans ton classpath.

    Au passage, je ne voudrais pas enfoncer, mais t'aurais le même genre de merde avec angular-js si tu veux utiliser une librairie sans prendre les librairies dont elle dépend. Mais en beaucoup moins lisible. Et on n'a jamais vu spring s'effondrer parce qu'un type a effacé son repo personnel contenant une librairie faite pour ajouter des espaces.

  6. #6
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Juste pour troller un peu sur le jar hell: il existe des systèmes de gestion de modules en Java qui permettent d'éviter le jar hell depuis environ 10 ans, Maven au build-time, OSGi ou JBoss Modules ou NetBeans modules au runtime dans un conteneur qui les comprend. C'est donc au final un problème résolu et s'il y a des gens à blâmer pour le jar hell, c'est plus les développeurs qui ont préféré snober ce genre de technologie
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut
    À quoi penses-tu, en particulier ?
    Peux-tu illustrer ?

Discussions similaires

  1. Spring 3.0/JPA: Loader des beans contenus dans un .jar
    Par lookthat dans le forum Spring Web
    Réponses: 0
    Dernier message: 21/01/2011, 14h14
  2. [Batch] Batch jar java avec spring
    Par jovanovic dans le forum Spring
    Réponses: 1
    Dernier message: 24/02/2009, 20h54
  3. Réponses: 3
    Dernier message: 26/11/2008, 17h19
  4. Charger un contexte spring, situé dans un jar
    Par emaison dans le forum Spring
    Réponses: 2
    Dernier message: 01/10/2007, 09h12
  5. Réponses: 1
    Dernier message: 05/03/2007, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo