Newsgroup: it.comp.java
Titolo: ancora creazione jar...

Scusate ma ho bisogno urgente di creare un jar eseguibile da windows... 
è da 3 giorni che provo a creane uno funzionante ma non riesco. Ho messo 
tutte le classi necessarie in una directory. Dopodichè faccio partire il 
comando jar con questi argomenti:
jar cvfm prova.jar MANIFEST.MF *.*
Il file MANIFEST.MF è questo:
Manifest-Version: 1.0
Created-By: 1.5.0_01-b08 (Sun Microsystems Inc.)
Main-Class: programma.main
Tutte le classi sono all'interno del package programma e il mio main si 
chiama appunto main... (fantasia). Se provo a far partire il jar con 
doppio click da win mi da come errore:
Could not find the main class
Non riesco proprio a capire dove sta l'errore, ho controllato e nel jar 
creato ci sono tutte le classi ed il manifest è quello giusto....
Che diavolo devo fare per fare funzionare 'sto cacchio di jar????

 Main-Class: programma.main
C'è anche il percorso del package?
Devi mettere:
package.classe.main 

 Che diavolo devo fare per fare funzionare 'sto cacchio di jar????
Io non ho capito cos'č č programma.main.
Comnque, segui la seguente procedura:
Mettiti nella directory dove sono i .class
Esegui jar cvf prova.jar *.class
crea un file di testo che chiamerai manifest.txt in cui c'č un'unica
riga cosě fatta:
Main-Class: nomedelpuntoclassincuičilmainsenzailPUNTOclass
Esegui jar cmf manifest.txt prova.jar
Ora prova a lanciare il jar con
java -jar prova.jar

 Main-Class: nomedelpuntoclassincuičilmainsenzailPUNTOclass
quindi dovrei mettere solamente:
Main-Class: main
Ho seguito tutti i passaggi ma nemmeno cosě mi funziona...
Tra l'altro se provo a far partire da riga di comando il jar (java -jar 
prova.jar) mi da come errore:
Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.4', but '1.5' is required.
Error: could not find java.dll
Error: could not find Java 2 Runtime Environment.
Mentre se ci clicco sopra 2 volte mi da sempre:



Questo perchè nel path hai definito un'altra virtual machine (che
evidentemente hai sul tuo pc). Cambia il path con il percorso della 1.5
che hai installato.

 che hai installato.
Già! Il path da dove posso cambiarlo?

 che hai installato.
Ok risolto

Interessante adesso se provo a far partire il main mi dice:
Exception in thread "main" java.lang.NoClassDefFoundError: main (wrong 
name: pro
gramma/main)
Il main è main.class... perchè mi dice che non trova la classe con il 
main? Riporto le prime righe di main.class:
public class main {
   boolean packFrame = false;
   /**
    * Construct and show the application.
    */
   public main() {
     Frame1 frame = new Frame1();
     // Validate frames that have preset sizes
     // Pack frames that have useful preferred size info, e.g. from 
their layout
     if (packFrame) {
       frame.pack();
     }
     else {
       frame.validate();
     }
Eppure se lo faccio partire dal jbuilder (F9) funziona...

 gramma/main)
Ma nel Manifest (o meglio, nel txt di aggiornamento hai scritto
programmaPUNTOmain ?)
Comunque è qualche casino di classpath (guarda l'help di "java" e
ricordati che il path va scritto alla rovescio di windows cioè con le
directory separate da "/" anzichè da "\").

 nome.jar?
Se provo a fare java main mi da questo errore:
Exception in thread "main" java.lang.NoClassDefFoundError: main
(wrong name: programma/main)
E' strano perchč se compilo da jbuilder funziona tutto e l'applicazione 
parte

 parte
Perchč jbuilder lancia java col classpath corretto. Se vedi le prime 
righe della finestra dove appare l'output del programma c'e' un "java 
-cp " con una valangata di jar e anche la dir 'root' delle tue classi.
bye
DKano
PS Le classi in java dovrebbero avere le iniziali maiuscole... Main e 
non main.

 non main.
Giusto! Dopo controllo grazie per le dritte!

 
Ma il package di 'main' qual'e'? Il file dovrebbe iniziare con
package programma;
visto che chiami la classe programma.main
bye
DKano

 DKano
Si esatto, l'ho scritto anche nel primo post


L'ho riletto ...
ricapitoliamo:
- le classi sono nel package programma (quindi iniziano con
"package programma;")
- una volta generate, vanno a finire nella cartella 'programma'
- ti posizioni sopra la cartella 'programma' e includi tutti i file (e 
il manifest) nel jar
a questo punto dovresti avere un jar funzionante...
qualche prova
1) jar tvf nomejar.jar dovrebbe darti l'elenco delle classi:
...prorgamma/main.class
...programma/altraclasse.class
ecc.
2) java -cp nomejar.jar programma.main dovrebbe lanciare allo stesso 
modo la classe main
3) java -cp . programma.main nella dir sopra 'programma' idem
bye
DKano