Dopo oltre nove mesi ritorno sullo stesso argomento ma finalmente per modificare il tag a risolto e disegnare una faccia sorridente (rotfl)
Faccio il punto della situazione:
JAR è l'acronimo per Java ARchive, una collezione di file .java (o dei loro compilati .class) disposti con la stessa convenzione che si usa con i package java e spesso compressi con lo stesso algoritmo degli archivi zip (quindi l'unica differenza con un .zip è l'estensione).
Per eseguire un archivio jar bisogna digitare da riga di comando:
Quasi tutti gli ambienti di sviluppo consentono di esportare con un click del mouse un progetto java come archivio jar. Anche con Eclipse è così ma appena si importano nel progetto librerie esterne l'esportazione non funziona più correttamente.
Prima cosa da sapere è che un archivio .jar è sempre accompagnato da un file di manifest che si deve trovare zippato al suo interno in questa posizione:
Codice: Seleziona tutto
nomeFile.jar
- file1.class
- ...
- fileN.class
META-INF
- MANIFEST.MF
Un
manifest manitene informazioni relative alla classe da lanciare (quindi in parole povere indica la classe che contiene il
public static void main) e indica l'elenco delle librerie incluse nel progetto.
L'errore di eclipse è appunto nell'autogenerazione del manifest e nel posizionamento delle librerie.
Un manifest corretto è scritto in questo modo:
Codice: Seleziona tutto
Manifest-Version: 1.0
Main-Class: com.main.Main
Class-Path: activation-1.1.jar annogen-0.1.0.jar axiom-api-1.2.5.jar axiom-dom-1.2.5.jar
axiom-impl-1.2.5.jar axis2-adb-1.3.jar axis2-adb-codegen-1.3.jar axis2-clustering-1.3.jar
axis2-codegen-1.3.jar
Sembrerebbe un normale file di properties (chiave: valore) ma bisogna fare attenzione su alcune cose altrimenti Mr. Java si arrabbia.
1) una linea non può essere troppo grande (le specifiche dettate da Mr. Java Sun che sono
qui parlano di 72 byte) altrimenti compare quell'errore
java.io.IOException: line too long che mi ha fatto perdere la testa;
2) come se non bastasse quando c'è bisogno di scrivere più di 72 byte non si può andare daccapo così semplicemente, ma a fine riga e ad inizio riga successiva deve essere
rigorosamente inserito uno spazio, altrimenti Mr. Java si arrabbia un'altra volta.
Poi per il resto non credo ci sia altro da spiegare, un file di properties è auto-esplicativo.
Tutte le librerie esterne (nell'esempio i file activation-1.1.jar annogen-0.1.0.jar ... axis2-codegen-1.3.jar) devono andare all'esterno dell'archivio corrente ma allo stesso livello di directory nel nostro file.jar.
Se non avete dimenticato nulla lanciando il jar con la solita riga (
java -jar nomeFile.jar) dovremmo vedere la nostra applicazione girare senza strani errori e quindi Mr. Java è contento.
Finalmente posso dire risolto questo problema
e vedere il sorriso sulle labbra di Mr. Java (good)