Dans mon appli j'ai des dossiers contenants des données (dans un jar) :
yt.macave.datas.au
---------------.dz
etc...
j'aurai par ailleurs une liste de tous les cas possibles, MAIS je
souhaite pouvoir ajouter de nouveaux dossiers au fur et à mesure et
faire en sorte que mon appli détecte automatiquement si, par exemple
"yt.macave.datas.au" (les données pour l'Australie) est présent ou pas.
c'est possible ? Avec l'introspection ?
(après tout eclipse sait bien si un package est dans le path ou pas...)
Dans mon appli j'ai des dossiers contenants des données (dans un jar) :
yt.macave.datas.au
---------------.dz
etc...
j'aurai par ailleurs une liste de tous les cas possibles, MAIS je
souhaite pouvoir ajouter de nouveaux dossiers au fur et à mesure et
faire en sorte que mon appli détecte automatiquement si, par exemple
"yt.macave.datas.au" (les données pour l'Australie) est présent ou pas.
c'est possible ? Avec l'introspection ?
(après tout eclipse sait bien si un package est dans le path ou pas...)
Dans mon appli j'ai des dossiers contenants des données (dans un jar) :
yt.macave.datas.au
---------------.dz
etc...
j'aurai par ailleurs une liste de tous les cas possibles, MAIS je
souhaite pouvoir ajouter de nouveaux dossiers au fur et à mesure et
faire en sorte que mon appli détecte automatiquement si, par exemple
"yt.macave.datas.au" (les données pour l'Australie) est présent ou pas.
c'est possible ? Avec l'introspection ?
(après tout eclipse sait bien si un package est dans le path ou pas...)
Yvon Thoraval wrote:Dans mon appli j'ai des dossiers contenants des données (dans un jar) :
yt.macave.datas.au
---------------.dz
etc...
j'aurai par ailleurs une liste de tous les cas possibles, MAIS je
souhaite pouvoir ajouter de nouveaux dossiers au fur et à mesure et
faire en sorte que mon appli détecte automatiquement si, par exemple
"yt.macave.datas.au" (les données pour l'Australie) est présent ou pas.
c'est possible ? Avec l'introspection ?
(après tout eclipse sait bien si un package est dans le path ou pas...)
Non, il est impossible de demander au classLoader la liste des classe
disponible, encore moins la liste des packages.
Le "package" n'a d'utilité que pour organiser les classes et pour gérer
les droits... Il ne contient aucune information....
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
@+
Clément
Yvon Thoraval wrote:
Dans mon appli j'ai des dossiers contenants des données (dans un jar) :
yt.macave.datas.au
---------------.dz
etc...
j'aurai par ailleurs une liste de tous les cas possibles, MAIS je
souhaite pouvoir ajouter de nouveaux dossiers au fur et à mesure et
faire en sorte que mon appli détecte automatiquement si, par exemple
"yt.macave.datas.au" (les données pour l'Australie) est présent ou pas.
c'est possible ? Avec l'introspection ?
(après tout eclipse sait bien si un package est dans le path ou pas...)
Non, il est impossible de demander au classLoader la liste des classe
disponible, encore moins la liste des packages.
Le "package" n'a d'utilité que pour organiser les classes et pour gérer
les droits... Il ne contient aucune information....
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
@+
Clément
Yvon Thoraval wrote:Dans mon appli j'ai des dossiers contenants des données (dans un jar) :
yt.macave.datas.au
---------------.dz
etc...
j'aurai par ailleurs une liste de tous les cas possibles, MAIS je
souhaite pouvoir ajouter de nouveaux dossiers au fur et à mesure et
faire en sorte que mon appli détecte automatiquement si, par exemple
"yt.macave.datas.au" (les données pour l'Australie) est présent ou pas.
c'est possible ? Avec l'introspection ?
(après tout eclipse sait bien si un package est dans le path ou pas...)
Non, il est impossible de demander au classLoader la liste des classe
disponible, encore moins la liste des packages.
Le "package" n'a d'utilité que pour organiser les classes et pour gérer
les droits... Il ne contient aucune information....
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
@+
Clément
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
Black Myst <Black_point_myst_chez_free_fr> wrote:Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
des classes, c'est mon gestionnaire d'appellations (vins) qui est
organisé ainsi :
yt.macave.datas.au le package correspondant à L'australie
supposons qu'il ne soit pas dans le jar pour diverses raisons, mais que
le package :
yt.macave.datas.fr y soit
par construction j'ai qqpart la liste des pays viticoles, ds mon exemple
j'aurais : "Australie", "France"
dans chaque package j'ai une class portant (à peu près juste pour
simplifier) le nom du pays, cette class a aussi une methode (au moins)
qui est add(), toujours la même fonction qqsoit le pays.
ce que je veux donc faire c'est "introspecter" le jar Appellations.jar
pour savoir quels pays y sont inclus.
ce que je fais, pour l'instant :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
[...]
Australie.add(worldApps, world);
[...]
France.add(worldApps, world);
ce que je voudrais pouvoir faire (donné schématiquement) :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
String[] allPossibleCountries = {"Australie", ..., "France"};
Class[] allPossibleCountriesClazz = { Australie.class, ...,
France.class};
for (allPossibleCountries) {
if(thisCountryExistsInPackage()) {
Class clazz = allPossibleCountriesClazz[i];
clazz.add(worldApps, world);
}
}
Le seul truc que je n'avais pas trouvé hier soir, c'est le moyen
d'implémenter thisCountryExistsInPackage() et je pense avoir trouvé,
grâce à un article de Shawn Silverman ( Java Tip 127: See JAR run) dans
JavaWorld
(<http://www.javaworld.com/javaworld/javatips/jw-javatip127.html>)
qui répond, indirectement, à ma question.
J'ai fait un petit test sur un jar contenant mon app :
JarInputStream jarIn = new JarInputStream(new
FileInputStream("le_fichier_a_lire"));
JarEntry entry;
while ((entry = jarIn.getNextJarEntry()) != null) {
System.out.println("entry.getName() : " + entry.getName());
}
qui me donne la même chose que "jar tf le_fichier_a_lire" mais cette
fois-ci, non pas à la console mais dans un prog java... :
~/work/Java/Jar/ReadJarContents> java ReadJarContents monapp.jar
[...]
entry.getName() : yt/macave/bottles/datas/BottlesAll.class
entry.getName() : yt/macave/bottles/datas/FileInit.class
entry.getName() : yt/macave/bottles/MasterOfWine.class
entry.getName() : yt/macave/bottles/Person.class
entry.getName() : yt/macave/bottles/PhoneLine.class
entry.getName() : yt/macave/bottles/PostalAddress.class
entry.getName() : yt/macave/bottles/Price.class
entry.getName() : yt/macave/bottles/Producer.class
entry.getName() : yt/macave/bottles/SimpleDate.class
[...]
par exemple, c'est donc faisable ««« yapuka »»» ;-)
ça me permettra des màj automatiques sans souci...
... enfin ;-) c'est ce que j'espère...
Black Myst <Black_point_myst_chez_free_fr> wrote:
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
des classes, c'est mon gestionnaire d'appellations (vins) qui est
organisé ainsi :
yt.macave.datas.au le package correspondant à L'australie
supposons qu'il ne soit pas dans le jar pour diverses raisons, mais que
le package :
yt.macave.datas.fr y soit
par construction j'ai qqpart la liste des pays viticoles, ds mon exemple
j'aurais : "Australie", "France"
dans chaque package j'ai une class portant (à peu près juste pour
simplifier) le nom du pays, cette class a aussi une methode (au moins)
qui est add(), toujours la même fonction qqsoit le pays.
ce que je veux donc faire c'est "introspecter" le jar Appellations.jar
pour savoir quels pays y sont inclus.
ce que je fais, pour l'instant :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
[...]
Australie.add(worldApps, world);
[...]
France.add(worldApps, world);
ce que je voudrais pouvoir faire (donné schématiquement) :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
String[] allPossibleCountries = {"Australie", ..., "France"};
Class[] allPossibleCountriesClazz = { Australie.class, ...,
France.class};
for (allPossibleCountries) {
if(thisCountryExistsInPackage()) {
Class clazz = allPossibleCountriesClazz[i];
clazz.add(worldApps, world);
}
}
Le seul truc que je n'avais pas trouvé hier soir, c'est le moyen
d'implémenter thisCountryExistsInPackage() et je pense avoir trouvé,
grâce à un article de Shawn Silverman ( Java Tip 127: See JAR run) dans
JavaWorld
(<http://www.javaworld.com/javaworld/javatips/jw-javatip127.html>)
qui répond, indirectement, à ma question.
J'ai fait un petit test sur un jar contenant mon app :
JarInputStream jarIn = new JarInputStream(new
FileInputStream("le_fichier_a_lire"));
JarEntry entry;
while ((entry = jarIn.getNextJarEntry()) != null) {
System.out.println("entry.getName() : " + entry.getName());
}
qui me donne la même chose que "jar tf le_fichier_a_lire" mais cette
fois-ci, non pas à la console mais dans un prog java... :
~/work/Java/Jar/ReadJarContents> java ReadJarContents monapp.jar
[...]
entry.getName() : yt/macave/bottles/datas/BottlesAll.class
entry.getName() : yt/macave/bottles/datas/FileInit.class
entry.getName() : yt/macave/bottles/MasterOfWine.class
entry.getName() : yt/macave/bottles/Person.class
entry.getName() : yt/macave/bottles/PhoneLine.class
entry.getName() : yt/macave/bottles/PostalAddress.class
entry.getName() : yt/macave/bottles/Price.class
entry.getName() : yt/macave/bottles/Producer.class
entry.getName() : yt/macave/bottles/SimpleDate.class
[...]
par exemple, c'est donc faisable ««« yapuka »»» ;-)
ça me permettra des màj automatiques sans souci...
... enfin ;-) c'est ce que j'espère...
Black Myst <Black_point_myst_chez_free_fr> wrote:Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
des classes, c'est mon gestionnaire d'appellations (vins) qui est
organisé ainsi :
yt.macave.datas.au le package correspondant à L'australie
supposons qu'il ne soit pas dans le jar pour diverses raisons, mais que
le package :
yt.macave.datas.fr y soit
par construction j'ai qqpart la liste des pays viticoles, ds mon exemple
j'aurais : "Australie", "France"
dans chaque package j'ai une class portant (à peu près juste pour
simplifier) le nom du pays, cette class a aussi une methode (au moins)
qui est add(), toujours la même fonction qqsoit le pays.
ce que je veux donc faire c'est "introspecter" le jar Appellations.jar
pour savoir quels pays y sont inclus.
ce que je fais, pour l'instant :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
[...]
Australie.add(worldApps, world);
[...]
France.add(worldApps, world);
ce que je voudrais pouvoir faire (donné schématiquement) :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
String[] allPossibleCountries = {"Australie", ..., "France"};
Class[] allPossibleCountriesClazz = { Australie.class, ...,
France.class};
for (allPossibleCountries) {
if(thisCountryExistsInPackage()) {
Class clazz = allPossibleCountriesClazz[i];
clazz.add(worldApps, world);
}
}
Le seul truc que je n'avais pas trouvé hier soir, c'est le moyen
d'implémenter thisCountryExistsInPackage() et je pense avoir trouvé,
grâce à un article de Shawn Silverman ( Java Tip 127: See JAR run) dans
JavaWorld
(<http://www.javaworld.com/javaworld/javatips/jw-javatip127.html>)
qui répond, indirectement, à ma question.
J'ai fait un petit test sur un jar contenant mon app :
JarInputStream jarIn = new JarInputStream(new
FileInputStream("le_fichier_a_lire"));
JarEntry entry;
while ((entry = jarIn.getNextJarEntry()) != null) {
System.out.println("entry.getName() : " + entry.getName());
}
qui me donne la même chose que "jar tf le_fichier_a_lire" mais cette
fois-ci, non pas à la console mais dans un prog java... :
~/work/Java/Jar/ReadJarContents> java ReadJarContents monapp.jar
[...]
entry.getName() : yt/macave/bottles/datas/BottlesAll.class
entry.getName() : yt/macave/bottles/datas/FileInit.class
entry.getName() : yt/macave/bottles/MasterOfWine.class
entry.getName() : yt/macave/bottles/Person.class
entry.getName() : yt/macave/bottles/PhoneLine.class
entry.getName() : yt/macave/bottles/PostalAddress.class
entry.getName() : yt/macave/bottles/Price.class
entry.getName() : yt/macave/bottles/Producer.class
entry.getName() : yt/macave/bottles/SimpleDate.class
[...]
par exemple, c'est donc faisable ««« yapuka »»» ;-)
ça me permettra des màj automatiques sans souci...
... enfin ;-) c'est ce que j'espère...
Black Myst <Black_point_myst_chez_free_fr> wrote:
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
des classes, c'est mon gestionnaire d'appellations (vins) qui est
organisé ainsi :
yt.macave.datas.au le package correspondant à L'australie
supposons qu'il ne soit pas dans le jar pour diverses raisons, mais que
le package :
yt.macave.datas.fr y soit
par construction j'ai qqpart la liste des pays viticoles, ds mon exemple
j'aurais : "Australie", "France"
dans chaque package j'ai une class portant (à peu près juste pour
simplifier) le nom du pays, cette class a aussi une methode (au moins)
qui est add(), toujours la même fonction qqsoit le pays.
ce que je veux donc faire c'est "introspecter" le jar Appellations.jar
pour savoir quels pays y sont inclus.
ce que je fais, pour l'instant :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
[...]
Australie.add(worldApps, world);
[...]
France.add(worldApps, world);
ce que je voudrais pouvoir faire (donné schématiquement) :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
String[] allPossibleCountries = {"Australie", ..., "France"};
Class[] allPossibleCountriesClazz = { Australie.class, ...,
France.class};
for (allPossibleCountries) {
if(thisCountryExistsInPackage()) {
Class clazz = allPossibleCountriesClazz[i];
clazz.add(worldApps, world);
}
}
Le seul truc que je n'avais pas trouvé hier soir, c'est le moyen
d'implémenter thisCountryExistsInPackage() et je pense avoir trouvé,
grâce à un article de Shawn Silverman ( Java Tip 127: See JAR run) dans
JavaWorld
(<http://www.javaworld.com/javaworld/javatips/jw-javatip127.html>)
qui répond, indirectement, à ma question.
J'ai fait un petit test sur un jar contenant mon app :
JarInputStream jarIn = new JarInputStream(new
FileInputStream("le_fichier_a_lire"));
JarEntry entry;
while ((entry = jarIn.getNextJarEntry()) != null) {
System.out.println("entry.getName() : " + entry.getName());
}
qui me donne la même chose que "jar tf le_fichier_a_lire" mais cette
fois-ci, non pas à la console mais dans un prog java... :
~/work/Java/Jar/ReadJarContents> java ReadJarContents monapp.jar
[...]
entry.getName() : yt/macave/bottles/datas/BottlesAll.class
entry.getName() : yt/macave/bottles/datas/FileInit.class
entry.getName() : yt/macave/bottles/MasterOfWine.class
entry.getName() : yt/macave/bottles/Person.class
entry.getName() : yt/macave/bottles/PhoneLine.class
entry.getName() : yt/macave/bottles/PostalAddress.class
entry.getName() : yt/macave/bottles/Price.class
entry.getName() : yt/macave/bottles/Producer.class
entry.getName() : yt/macave/bottles/SimpleDate.class
[...]
par exemple, c'est donc faisable ««« yapuka »»» ;-)
ça me permettra des màj automatiques sans souci...
... enfin ;-) c'est ce que j'espère...
Black Myst <Black_point_myst_chez_free_fr> wrote:
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
des classes, c'est mon gestionnaire d'appellations (vins) qui est
organisé ainsi :
yt.macave.datas.au le package correspondant à L'australie
supposons qu'il ne soit pas dans le jar pour diverses raisons, mais que
le package :
yt.macave.datas.fr y soit
par construction j'ai qqpart la liste des pays viticoles, ds mon exemple
j'aurais : "Australie", "France"
dans chaque package j'ai une class portant (à peu près juste pour
simplifier) le nom du pays, cette class a aussi une methode (au moins)
qui est add(), toujours la même fonction qqsoit le pays.
ce que je veux donc faire c'est "introspecter" le jar Appellations.jar
pour savoir quels pays y sont inclus.
ce que je fais, pour l'instant :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
[...]
Australie.add(worldApps, world);
[...]
France.add(worldApps, world);
ce que je voudrais pouvoir faire (donné schématiquement) :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
String[] allPossibleCountries = {"Australie", ..., "France"};
Class[] allPossibleCountriesClazz = { Australie.class, ...,
France.class};
for (allPossibleCountries) {
if(thisCountryExistsInPackage()) {
Class clazz = allPossibleCountriesClazz[i];
clazz.add(worldApps, world);
}
}
Le seul truc que je n'avais pas trouvé hier soir, c'est le moyen
d'implémenter thisCountryExistsInPackage() et je pense avoir trouvé,
grâce à un article de Shawn Silverman ( Java Tip 127: See JAR run) dans
JavaWorld
(<http://www.javaworld.com/javaworld/javatips/jw-javatip127.html>)
qui répond, indirectement, à ma question.
J'ai fait un petit test sur un jar contenant mon app :
JarInputStream jarIn = new JarInputStream(new
FileInputStream("le_fichier_a_lire"));
JarEntry entry;
while ((entry = jarIn.getNextJarEntry()) != null) {
System.out.println("entry.getName() : " + entry.getName());
}
qui me donne la même chose que "jar tf le_fichier_a_lire" mais cette
fois-ci, non pas à la console mais dans un prog java... :
~/work/Java/Jar/ReadJarContents> java ReadJarContents monapp.jar
[...]
entry.getName() : yt/macave/bottles/datas/BottlesAll.class
entry.getName() : yt/macave/bottles/datas/FileInit.class
entry.getName() : yt/macave/bottles/MasterOfWine.class
entry.getName() : yt/macave/bottles/Person.class
entry.getName() : yt/macave/bottles/PhoneLine.class
entry.getName() : yt/macave/bottles/PostalAddress.class
entry.getName() : yt/macave/bottles/Price.class
entry.getName() : yt/macave/bottles/Producer.class
entry.getName() : yt/macave/bottles/SimpleDate.class
[...]
par exemple, c'est donc faisable ««« yapuka »»» ;-)
ça me permettra des màj automatiques sans souci...
... enfin ;-) c'est ce que j'espère...
Black Myst <Black_point_myst_chez_free_fr> wrote:
Que contienne les répertoires de ton Jar, cherche-tu un fichier ou une
classe ?
des classes, c'est mon gestionnaire d'appellations (vins) qui est
organisé ainsi :
yt.macave.datas.au le package correspondant à L'australie
supposons qu'il ne soit pas dans le jar pour diverses raisons, mais que
le package :
yt.macave.datas.fr y soit
par construction j'ai qqpart la liste des pays viticoles, ds mon exemple
j'aurais : "Australie", "France"
dans chaque package j'ai une class portant (à peu près juste pour
simplifier) le nom du pays, cette class a aussi une methode (au moins)
qui est add(), toujours la même fonction qqsoit le pays.
ce que je veux donc faire c'est "introspecter" le jar Appellations.jar
pour savoir quels pays y sont inclus.
ce que je fais, pour l'instant :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
[...]
Australie.add(worldApps, world);
[...]
France.add(worldApps, world);
ce que je voudrais pouvoir faire (donné schématiquement) :
Map worldApps = new TreeMap();
Area world = new Area("Terre", "Racine", "WORLD", null);
worldApps.put(world, empty);
String[] allPossibleCountries = {"Australie", ..., "France"};
Class[] allPossibleCountriesClazz = { Australie.class, ...,
France.class};
for (allPossibleCountries) {
if(thisCountryExistsInPackage()) {
Class clazz = allPossibleCountriesClazz[i];
clazz.add(worldApps, world);
}
}
Le seul truc que je n'avais pas trouvé hier soir, c'est le moyen
d'implémenter thisCountryExistsInPackage() et je pense avoir trouvé,
grâce à un article de Shawn Silverman ( Java Tip 127: See JAR run) dans
JavaWorld
(<http://www.javaworld.com/javaworld/javatips/jw-javatip127.html>)
qui répond, indirectement, à ma question.
J'ai fait un petit test sur un jar contenant mon app :
JarInputStream jarIn = new JarInputStream(new
FileInputStream("le_fichier_a_lire"));
JarEntry entry;
while ((entry = jarIn.getNextJarEntry()) != null) {
System.out.println("entry.getName() : " + entry.getName());
}
qui me donne la même chose que "jar tf le_fichier_a_lire" mais cette
fois-ci, non pas à la console mais dans un prog java... :
~/work/Java/Jar/ReadJarContents> java ReadJarContents monapp.jar
[...]
entry.getName() : yt/macave/bottles/datas/BottlesAll.class
entry.getName() : yt/macave/bottles/datas/FileInit.class
entry.getName() : yt/macave/bottles/MasterOfWine.class
entry.getName() : yt/macave/bottles/Person.class
entry.getName() : yt/macave/bottles/PhoneLine.class
entry.getName() : yt/macave/bottles/PostalAddress.class
entry.getName() : yt/macave/bottles/Price.class
entry.getName() : yt/macave/bottles/Producer.class
entry.getName() : yt/macave/bottles/SimpleDate.class
[...]
par exemple, c'est donc faisable ««« yapuka »»» ;-)
ça me permettra des màj automatiques sans souci...
... enfin ;-) c'est ce que j'espère...
je ne sais pas bien si je reponds a la question. Dans chaque classes une
methode static exist() et un try catch pour gerer l'exception
je ne sais pas bien si je reponds a la question. Dans chaque classes une
methode static exist() et un try catch pour gerer l'exception
je ne sais pas bien si je reponds a la question. Dans chaque classes une
methode static exist() et un try catch pour gerer l'exception
Non, c'est clairement pas la bonne démarche, si tu y passe beaucoup de
temps, tu réussira peut-être à le faire marcher sur ton poste de dev,
mais la solution que tu décrit est le meilleur moyen de se tiré dans le
pied à la première install...
Résumons :
- Tu as un certain nombre de classe que tu doit retrouvé dynamiquement :
- yt.macave.datas.fr.France
- yt.macave.datas.au.Australie
- Toutes ses classes hérite d'une même classe ou implémente une
interface définissant la méthode 'add'.
- Tu connais la liste des pays mais pas leur nom de paquage -> ca nous
sert à rien pour les retrouver !
A faire :
- Un fichier txt simple, contenant 1 nom complet (paquage+classe) par
ligne, que tu place à un endroit unique... yt/macave/datas/ListPays.txt
- Tu peux demander au ClassLoader se fichier, car tu connais son nom.
- Ensuite tu lis le fichier et tu utilise la reflexivité pour charger,
instancier et exécuter 'add' sur toutes tes classes.
oui, c'est vrai je peux générer ce fichier *.txt automatiquement au
Cerise sur le gâteau :
Si tu veux ditribuer ton application sous forme de plusieur JAR, tu
créer un fichier yt/macave/datas/ListPays.txt pour chaque JAR, contenant
le nom des classes contenus dans le JAR.
Tu peux ensuite demandé au ClassLoader qui te donne accès à tous les
fichiers yt/macave/datas/ListPays.txt, tu peux donc les ouvrirs l'un
après l'autre pour découvrir les classes dans chacuns des JAR.
Le tout en utilisant le comportement 'normale' du ClassLoader... Ca
n'exclus pas tous les risques de déployment, mais ca limite quand même...
Sinon, pour en revenir à ton code, ca me semble super bizare une classe
yt.macave.datas.fr.France... Ca me laisse croire que tes données sont
hard-codé dans des classes java... pourquoi ne pas faire 1 ou plusieurs
fichiers de données en XML ???
Oui, c'est vrai, mais ce n'est que temporaire, ce n'est qu'une solution
Non, c'est clairement pas la bonne démarche, si tu y passe beaucoup de
temps, tu réussira peut-être à le faire marcher sur ton poste de dev,
mais la solution que tu décrit est le meilleur moyen de se tiré dans le
pied à la première install...
Résumons :
- Tu as un certain nombre de classe que tu doit retrouvé dynamiquement :
- yt.macave.datas.fr.France
- yt.macave.datas.au.Australie
- Toutes ses classes hérite d'une même classe ou implémente une
interface définissant la méthode 'add'.
- Tu connais la liste des pays mais pas leur nom de paquage -> ca nous
sert à rien pour les retrouver !
A faire :
- Un fichier txt simple, contenant 1 nom complet (paquage+classe) par
ligne, que tu place à un endroit unique... yt/macave/datas/ListPays.txt
- Tu peux demander au ClassLoader se fichier, car tu connais son nom.
- Ensuite tu lis le fichier et tu utilise la reflexivité pour charger,
instancier et exécuter 'add' sur toutes tes classes.
oui, c'est vrai je peux générer ce fichier *.txt automatiquement au
Cerise sur le gâteau :
Si tu veux ditribuer ton application sous forme de plusieur JAR, tu
créer un fichier yt/macave/datas/ListPays.txt pour chaque JAR, contenant
le nom des classes contenus dans le JAR.
Tu peux ensuite demandé au ClassLoader qui te donne accès à tous les
fichiers yt/macave/datas/ListPays.txt, tu peux donc les ouvrirs l'un
après l'autre pour découvrir les classes dans chacuns des JAR.
Le tout en utilisant le comportement 'normale' du ClassLoader... Ca
n'exclus pas tous les risques de déployment, mais ca limite quand même...
Sinon, pour en revenir à ton code, ca me semble super bizare une classe
yt.macave.datas.fr.France... Ca me laisse croire que tes données sont
hard-codé dans des classes java... pourquoi ne pas faire 1 ou plusieurs
fichiers de données en XML ???
Oui, c'est vrai, mais ce n'est que temporaire, ce n'est qu'une solution
Non, c'est clairement pas la bonne démarche, si tu y passe beaucoup de
temps, tu réussira peut-être à le faire marcher sur ton poste de dev,
mais la solution que tu décrit est le meilleur moyen de se tiré dans le
pied à la première install...
Résumons :
- Tu as un certain nombre de classe que tu doit retrouvé dynamiquement :
- yt.macave.datas.fr.France
- yt.macave.datas.au.Australie
- Toutes ses classes hérite d'une même classe ou implémente une
interface définissant la méthode 'add'.
- Tu connais la liste des pays mais pas leur nom de paquage -> ca nous
sert à rien pour les retrouver !
A faire :
- Un fichier txt simple, contenant 1 nom complet (paquage+classe) par
ligne, que tu place à un endroit unique... yt/macave/datas/ListPays.txt
- Tu peux demander au ClassLoader se fichier, car tu connais son nom.
- Ensuite tu lis le fichier et tu utilise la reflexivité pour charger,
instancier et exécuter 'add' sur toutes tes classes.
oui, c'est vrai je peux générer ce fichier *.txt automatiquement au
Cerise sur le gâteau :
Si tu veux ditribuer ton application sous forme de plusieur JAR, tu
créer un fichier yt/macave/datas/ListPays.txt pour chaque JAR, contenant
le nom des classes contenus dans le JAR.
Tu peux ensuite demandé au ClassLoader qui te donne accès à tous les
fichiers yt/macave/datas/ListPays.txt, tu peux donc les ouvrirs l'un
après l'autre pour découvrir les classes dans chacuns des JAR.
Le tout en utilisant le comportement 'normale' du ClassLoader... Ca
n'exclus pas tous les risques de déployment, mais ca limite quand même...
Sinon, pour en revenir à ton code, ca me semble super bizare une classe
yt.macave.datas.fr.France... Ca me laisse croire que tes données sont
hard-codé dans des classes java... pourquoi ne pas faire 1 ou plusieurs
fichiers de données en XML ???
Oui, c'est vrai, mais ce n'est que temporaire, ce n'est qu'une solution
Personnellement je pense que ton problème se résoudrait très bien avec
une base de données plutôt que plein de classes.
Tous tes problèmes d'existence de classes seraient gérés par la base de
données.
Juste une idée comme ça.
Personnellement je pense que ton problème se résoudrait très bien avec
une base de données plutôt que plein de classes.
Tous tes problèmes d'existence de classes seraient gérés par la base de
données.
Juste une idée comme ça.
Personnellement je pense que ton problème se résoudrait très bien avec
une base de données plutôt que plein de classes.
Tous tes problèmes d'existence de classes seraient gérés par la base de
données.
Juste une idée comme ça.