U
unnütz
Gast
Hi,
ist ein wenig schwer für meine Frage einen entsprechenden Titel zu finden, deshalb hier die genauere Beschreibung.
Ich habe zwei JAR's:
MyApp.jar und Extension.jar
Es ist nun so, dass die Hauptanwendung (MyApp) auf Funktionen von Extension.jar zugreift. Wird aber nun die Extension.jar nicht mit ausgeliefert bzw. befindet sie sich nicht im selben Ordner wie die Hauptanwendung, so sollen diese Funktionen nicht verfügbar sein und das Hauptprogramm nicht abstürzen.
Diese Erweiterungen werden nur an sehr wenigen Stellen im Code verwendet, daher wollte ich auch auf sowas wie einen Plug-In mechanismus verzichten und das ganze quick&dirty lösen. Klappt aber nicht...
Mein Ansatz ist folgender:
MyApp.JAR/Config.class
[Java]
public static boolean IS_EXTENSION_AVAILABLE;
static {
try {
IS_EXTENSION_AVAILABLE = extensionJar.Constants.IS_AVAILABLE;
// IS_AVAILABLE ist immer true
} catch (Throwable t) {
}
}
[/code]
Weiterhin verwende ich dann die Extension.jar folgendermaßen:
MyApp.jar/SomeClass.class
Mein Gedankengang ist nun folgender:
- IS_EXTENSION_AVAILABLE hat den selben Wert wie eine Variable innerhalb von der Extension.jar. Daher ist sie nur dann true, wenn die Extension.jar verfügbar ist
- Durch die Verwendung von if abfragen werden die Funktionen aus der Extension.jar nur genau dann aufgerufen, wenn die Extension.jar verfügbar ist
- Durch die Verwendung von vollqualifizierten Klassennamen innerhalb der if gibt es keine imports etc. die die Anwendung zum abstürzen bringen können
So, in der Praxis ist es nun so, dass die Anwendung abstürzt sobald ich MyApp.jar/SomeClass.class aufrufe weil extensionJar.SomeOtherClass nicht gefunden werden kann.
Aber warum ist das so? Die if-Bedingung ist an dieser immer false, daher sollte die VM eigentlich auch nie merken, dass da etwas im class-path fehlt...?
ist ein wenig schwer für meine Frage einen entsprechenden Titel zu finden, deshalb hier die genauere Beschreibung.
Ich habe zwei JAR's:
MyApp.jar und Extension.jar
Es ist nun so, dass die Hauptanwendung (MyApp) auf Funktionen von Extension.jar zugreift. Wird aber nun die Extension.jar nicht mit ausgeliefert bzw. befindet sie sich nicht im selben Ordner wie die Hauptanwendung, so sollen diese Funktionen nicht verfügbar sein und das Hauptprogramm nicht abstürzen.
Diese Erweiterungen werden nur an sehr wenigen Stellen im Code verwendet, daher wollte ich auch auf sowas wie einen Plug-In mechanismus verzichten und das ganze quick&dirty lösen. Klappt aber nicht...
Mein Ansatz ist folgender:
MyApp.JAR/Config.class
[Java]
public static boolean IS_EXTENSION_AVAILABLE;
static {
try {
IS_EXTENSION_AVAILABLE = extensionJar.Constants.IS_AVAILABLE;
// IS_AVAILABLE ist immer true
} catch (Throwable t) {
}
}
[/code]
Weiterhin verwende ich dann die Extension.jar folgendermaßen:
MyApp.jar/SomeClass.class
Java:
if (Config.IS_EXTENSION_AVAILABLE)
extensionJar.SomeOtherClass.aFunction();
Mein Gedankengang ist nun folgender:
- IS_EXTENSION_AVAILABLE hat den selben Wert wie eine Variable innerhalb von der Extension.jar. Daher ist sie nur dann true, wenn die Extension.jar verfügbar ist
- Durch die Verwendung von if abfragen werden die Funktionen aus der Extension.jar nur genau dann aufgerufen, wenn die Extension.jar verfügbar ist
- Durch die Verwendung von vollqualifizierten Klassennamen innerhalb der if gibt es keine imports etc. die die Anwendung zum abstürzen bringen können
So, in der Praxis ist es nun so, dass die Anwendung abstürzt sobald ich MyApp.jar/SomeClass.class aufrufe weil extensionJar.SomeOtherClass nicht gefunden werden kann.
Aber warum ist das so? Die if-Bedingung ist an dieser immer false, daher sollte die VM eigentlich auch nie merken, dass da etwas im class-path fehlt...?