salve a tutti...sembrerà assurdo ma la creazione del jar e' sempre stato il mio tallone d'achille!...Sto realizzando un progetto sulla base del server Flash per lo streaming "red5". Il tutto funziona senza problemi...fin quando ovviamente non provo a creare il jar con fatjar! a quel punto non mi viene caricato più nulla a partire dalla classe principale e non ne capisco il motivo! Praticamente, si avvia e immediatamente nella finestra di log compare l'ultima riga "Startup WebServer completato in " con tutti i valori settati a null! spero che qualcuno mi possa essere d'aiuto, posto il codice della classe principale di avvio del server, dalla quale vengono caricati tutti i file di configurazione:
codice:
package org.red5.server;
import org.red5.server.api.Red5;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.access.ContextSingletonBeanFactoryLocator;
/**
* Entry point dal quale il i file di configurazione del server vengono caricati:
* -----CLASSE DI PARTENZA-----
*/
public class Standalone {
/**
* Inizializza Logging.
*/
protected static Logger log = LoggerFactory.getLogger(Standalone.class);
protected static String red5Config = "red5.xml";
/**
* Re-throws exception
*/
public static void raiseOriginalException(Throwable e) throws Throwable {
// Cerca root exception
while (e.getCause() != null) {
e = e.getCause();
}
throw e;
}
/**
* Entry point per l'avvio del webserver in Standalone
*/
public void main(String[] args) throws Throwable {
if (args.length == 1) {
red5Config = args[0];
}
long time = System.currentTimeMillis();
log.info("Avvio in corso: {}", Red5.getVersion());
log.info("Caricamento global context da: {}", red5Config);
String classpath = System.getProperty("java.class.path");
// ricerca delle proprietà del root system
String root = System.getProperty("red5.root");
String conf;
if (root != null) {
conf = root + "/conf";
} else {
// Rileva il root di configurazione del webserver e lo imposta come proprietà di sistema
File fp = new File(red5Config);
fp = fp.getCanonicalFile();
if (!fp.isFile()) {
// Il file ottenuto non esiste, cercalo nel classpath
String[] paths = classpath.split(System
.getProperty("path.separator"));
for (String element : paths) {
fp = new File(element + '/' + red5Config);
fp = fp.getCanonicalFile();
if (fp.isFile()) {
break;
}
}
}
if (!fp.isFile()) {
throw new Exception("impossibile trovare il file di configurazione"
+ red5Config + " nel tuo classpath " + classpath);
}
System.setProperty("red5.conf_file", red5Config);
root = fp.getAbsolutePath();
root = root.replace('\\', '/');
int idx = root.lastIndexOf('/');
conf = root.substring(0, idx);
// Memorizza la directory root del webserver
idx = conf.lastIndexOf('/');
root = conf.substring(0, idx);
if (System.getProperty("file.separator").equals("/")) {
root = '/' + root;
}
// Imposta il root del webserver come variabile d'ambiente
System.setProperty("red5.root", root);
log.info("Imposta il percorso root del WebServer in {}", root);
}
System.setProperty("red5.config_root", conf);
log.info("Imposta il percorso di configurazione principale in {}", conf);
// Setup le proprietà di sistema in moda da poter essere elaborate da Jetty
Properties props = new Properties();
// Caricamento delle proprietà
props.load(new FileInputStream(conf + "/red5.properties"));
for (Object o : props.keySet()) {
String key = (String) o;
if (key != null && !key.equals("")) {
System.setProperty(key, props.getProperty(key));
}
}
try {
ContextSingletonBeanFactoryLocator.getInstance(red5Config)
.useBeanFactory("red5.common");
} catch (Exception e) {
raiseOriginalException(e);
}
long startupIn = System.currentTimeMillis() - time;
log.info("Startup WebServer completato in : {} ms", startupIn);
}
}
NB:non badate al fatto che nel main non compaia lo "static" perche' la prima finestra del programma e' in realtà un form che in seguito alla pressione del pulsante "start" richiama questa classe per caricarla!