Je développe actuellement un outil qui permet de vérifier la bonne rédaction d'un fichier. Il y a plusieurs règles (102) à vérifier pour conclure si oui ou non le fichier est correct. Pour ce faire j'ai une classe mère "rule" et 102 autres classes qui extends de "rule" me permettant de définir chaque règle. Enfin, j'ai le programme principal, le "moteur" qui permet de vérifier une ou plusieurs règles par ligne en fonction de la ligne traitée.
Tout fonctionne très bien. MAIS! Je DOIS diviser ce .jar en deux: la partie "moteur.jar" qui ne sera pas modifiable (question de sécurité) et la partie "règle.jar" qui sera modifiable.
La partie "règle.jar" doit être modifiable car le but est qu'un utilisateur puisse ajouter ses propres règles en suivant le pattern des autres règles. Puis l'utilisateur aura plus qu'à compiler "regles.jar" et le "moteur.jar" pourra les prendre en compte.
Mon problème est donc que le "moteur.jar" contient "règle.jar" en tant que librairie. Alors si j'ajoute une règle, il faut recompiler "règle.jar" (jusque là OK), mais il faut aussi recompiler "moteur.jar" pour qu'il prenne en compte les modifications effectuées sur "règle.jar". Or je ne veux pas que les utilisateurs aient à recompiler "moteur.jar", d'où le titre de mon post "Actualiser une librairie" afin d'actualiser "règles.jar" à chaque execution afin que règle.jar" ne soit pas en "dur" dans le code.
He bien non. Car le "regle.jar" est buildé avec le "moteur.jar"... du coup toute modification apporté à "regle.jar" n'est pas pris en compte lorsque j'utilise "moteur.jar". C'est comme si il fallait que je recharge cette librairie de regle pendant l'execution.
A ta place, je ferais tout d'abord 1 projets java avec 2 parties:
Rules-api (qui contiendrait par exemple une interface IRule avec les méthodes que les règles personnalisées doivent redéfinir)
Engine (pour la logique de déclenchement des règles. Utilise rules-api)
Avec ce projets, je créerais un premier jar -> file-checker-core.jar
Je crée un autre projet java "File checker default rules" dans lequels je définis X règles par défaut. Ce projet dépend évidement de file-checker-core.jar
Je créé un jar avec de projet -> file-checker-default-rules.jar
Tu fournis tes 2 jar (file-checker-core.jar et file-checker-default-rules.jar) à l'application cliente qui peut du coup créer ses propres règles.
Avec cette découpe, l'application cliente peut même se passer des règles par défaut si elle n'en a pas besoin.
C'est à peu près ce que j'ai (deux JAR dont un pour le moteur + interface pour les regles "moteur.jar", et l'autre qui contient toutes les règles modifiables "regles.jar"). Mais mon soucis est seulement dans l'utilisation du JAR modifiable.
Je souhaite que mon moteur puisse charger/utiliser le JAR contenant les règles sachant que celui-ci (regles.jar) peut avoir été modifié entre deux execution par exemple. Or pour le moment il est définit en tant que librairie dans "moteur.jar" et est donc en dur dans ce dernier.
Ce que je souhaite c'est plus une notion de plugin que de librairie car "regle.jar" sera amené à être modifié assez souvent.
Avec ce que je te propose, tu n'a plus de dépendance de moteur vers règles!
Montre moi comment ton moteur va chercher toutes les règles qui se trouvent dans le jar. Je pense que le problème vient de là et d'une très mauvaise architecture.
L'utilisateur pourra modifier ce fichier (contenu dans "regle.jar") une fois qu'il aura crée sa propre règle, ce qui permettra au Java de prendre en compte les nouvelles règles que l'utilisateur aura codé.
Actuellement, pour compiler (Je en parle pas de l'exécution), est ce que moteur a besoin de regle? En d'autres termes, si tu enlèves la dépendance entre moteur et règle, est-ce-que moteur contient des erreurs de build?
J'ai finalement réussi à faire ce que je souhaitais faire. Comme je l'ai mentionné dans mon post précédent j'ai inversé l'architecture!!! Ce qui m'a pris pas mal de temps...
Avant j'avais moteur.jar qui utilisait regle.jar, mais comme regle.jar est amené à changer souvent, il fallait compiler regle.jar puis moteur.jar.
Maintenant j'ai regle.jar qui utilise moteur.jar ce qui est plus logique car moteur.jar n'est pas modifiable! Du coup l'utilisateur aura à recompiler regle.jar et c'est OK!!
Merci pour ta patience !!
Actualiser Librairie
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
L'utilisateur pourra modifier ce fichier (contenu dans "regle.jar") une fois qu'il aura crée sa propre règle, ce qui permettra au Java de prendre en compte les nouvelles règles que l'utilisateur aura codé.