Non sarebbe meglio servire con l'uso di una classe principale "Launcher", la cui funzione è solo quella di inviare le chiamate alle classi effettive del controller e utilizzare un file di collegamento come wrapper finale, invece di giocherellare con il - opzione cp del wm?
In Windows, è sorprendentemente facile farlo.
La "classe principale" non ha bisogno di essere qualcosa di molto più complesso, qualcosa di simile a
/**
* Sample launcher
*/
public class Launcher {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
if (args != null && args.length > 0) {
String option= args[0];
String[] args2=new String[0];
if(args.length>1){
args2= new String[args.length-1];
System.arraycopy(args, 1, args2, 0, args2.length);
}
if(option.equals("a"));
new ClassA().exec(args2);
else if(option.equals("b"));
new ClassB().exec(args2);
}
}
}
Sul lato finestre delle cose, è abbastanza qualcosa come la creazione di un collegamento di questo tipo
javaw.exe -jar "jarfile" "a"
È molto utile per posizionare il link nella cartella "sendTo" ... un jar, nascosto, chiamato da molti link che attivano uno dei suoi aspetti rende più semplice la distribuzione degli aggiornamenti della logica jar.
I file effettivi selezionati vengono passati come un elenco di stringhe dopo i parametri nella definizione del collegamento.
In questo modo, non dovresti preoccuparti di tutti i problemi del classpath.
Ignorig classpath all'interno di manifest era una delle mie preoccupazioni. Ma ho provato questa soluzione, e sembra funzionare (ma non so perché davvero, perché ho impostato classpath all'interno di manifest) – wlk
È perché questa forma di avvio non si preoccupa di leggere il manifest. Solo la forma -jar legge manifest. –