N
nesapio
Gast
Hallo,
ich möchte per Reflection unterschiedliche DiagrammTypen lesen, die der User dann auswählen kann. Aus Eclipse funktioniert soweit alles bestens, aber wenn ich per Ant-Skript ein jar erstelle, dann funktioniert die Reflection nicht mehr.
Den Code häng ich unten an.
Der Pfad wird dabei aus dem paketnamen generiert und dann zu einer URL umgeformt. Über die URL wird dann der Ordner bestimmt und geöffnet, so dass daraus (eigentlich) die Diagramme geladen werden können.
Aus Eclipse sieht der Pfad wie folgt aus:
file:/C:/workspace/foo/bin/de/for/pimp/gui/result/panes/availablediagrams
Und beim Jar so:
jar:file:/C:/workspace/foo/jar/PerMoTo_0.91_Beta.jar!/de/for/pimp/gui/result/panes/availablediagrams
Im Jar ist der Ordner mit den Klassen mit drin, daran kann es also nicht liegen.
Eine Reflection die in einer Klasse der JAIDA Paketes stattfindet funktioniert ebenfalls nicht, also wäre ich auch für grundlegende Anregungen dankbar.
ich möchte per Reflection unterschiedliche DiagrammTypen lesen, die der User dann auswählen kann. Aus Eclipse funktioniert soweit alles bestens, aber wenn ich per Ant-Skript ein jar erstelle, dann funktioniert die Reflection nicht mehr.
Den Code häng ich unten an.
Der Pfad wird dabei aus dem paketnamen generiert und dann zu einer URL umgeformt. Über die URL wird dann der Ordner bestimmt und geöffnet, so dass daraus (eigentlich) die Diagramme geladen werden können.
Aus Eclipse sieht der Pfad wie folgt aus:
file:/C:/workspace/foo/bin/de/for/pimp/gui/result/panes/availablediagrams
Und beim Jar so:
jar:file:/C:/workspace/foo/jar/PerMoTo_0.91_Beta.jar!/de/for/pimp/gui/result/panes/availablediagrams
Im Jar ist der Ordner mit den Klassen mit drin, daran kann es also nicht liegen.
Eine Reflection die in einer Klasse der JAIDA Paketes stattfindet funktioniert ebenfalls nicht, also wäre ich auch für grundlegende Anregungen dankbar.
Code:
private String[] getDiagrams() throws ClassNotFoundException {
logger.info("Available diagrams are found and listed!");
// ArrayList<Class> classes = new ArrayList<Class>();
ArrayList<String> classesAsString = new ArrayList<String>();
File directory = null;
try {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (loader == null) {
logger.info("loader is null");
throw new ClassNotFoundException();
}
String path = packageName.replace('.', '/');
logger.info(path);
// String path = packageName.replace('.', '\'); //für linux
URL url = loader.getResource(path);
logger.info(url);
if (url == null) {
logger.info("url is null");
throw new ClassNotFoundException();
}
directory = new File(url.getFile());
} catch (Exception e) {
// e.printStackTrace();
throw new ClassNotFoundException();
}
if (directory.exists()) {
String[] files = directory.list();
boolean enthaeltDolarZeichen = false;
for (int i = 0; i < files.length; i++) {
if (files[i].endsWith(".class")) {
for(int k=0; k<files[i].length(); k++){
if(files[i].charAt(k) == '$'){
enthaeltDolarZeichen = true;
continue;
}
}
if(!enthaeltDolarZeichen){
String nameOfDiagram = files[i].substring(0, files[i]
.length() - 6);
classesAsString.add(nameOfDiagram);
}
}
enthaeltDolarZeichen = false;
}
}
String[] diagrams = new String[classesAsString.size()];
classesAsString.toArray(diagrams);
return diagrams;
}