[RISOLTO] portare programma fuori da eclipse

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
daemon_nio
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1012
Iscrizione: lunedì 15 gennaio 2007, 14:18
Sesso: Maschile
Località: London
Contatti:

[RISOLTO] portare programma fuori da eclipse

Messaggio da daemon_nio »

come da titolo:

come si porta un progetto (programma) fuori da eclipse?

Qual è il metodo migliore per farlo?
Ad esempio io ho fatto un mio progetto, un client e voglio lanciarlo fuori da eclipse. Come devo fare per farlo?
ho provato con

Codice: Seleziona tutto

java org.meteo.RichiesteMeteo
ma mi da quest'errore:

Codice: Seleziona tutto

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/axis2/AxisFault
infatti il mio programma (in eclipse) importa dei jar esterni.

ho provato a esportare tutto come jar e poi eseguire il jar ma ancora non va.
questo è l'errore:

Codice: Seleziona tutto

daemon_nio@matrix:~/Desktop$ java -jar meteo.jar
Failed to load Main-Class manifest attribute from
meteo.jar
dove sbaglio? ???
Ultima modifica di daemon_nio il mercoledì 24 settembre 2008, 22:09, modificato 1 volta in totale.
Sempre costruendo qualcosa di nuovo: Matag: The Game
Stoned
Prode Principiante
Messaggi: 154
Iscrizione: mercoledì 17 gennaio 2007, 17:38

Re: portare programma fuori da eclipse

Messaggio da Stoned »

Ci sono svariate discussioni in proposito nel forum....
Hai due possibilità :
1) Lanci il programma usando l'opzione -classpath seguita da tutte le librerie che usi
2) Modifichi il file manifest aggiungendo

Codice: Seleziona tutto

Class-Path: ................................
seguito da tutte le librerie che usi.
Avatar utente
daemon_nio
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1012
Iscrizione: lunedì 15 gennaio 2007, 14:18
Sesso: Maschile
Località: London
Contatti:

Re: portare programma fuori da eclipse

Messaggio da daemon_nio »

grazie ma non sono ancora riuscito a risolvere.

Ho appena letto tutte (almeno spero) le discussioni interessanti, ma non riesco a far funzionare.

Allora mi spiego meglio... forse sbagliavo qualcosa in partenza.

Dovevo programmare un client per axis2 e quindi importare alcune librerie .jar proprie di axis2.
Per importarle in eclipse avevo fatto project-->properties-->JavaBuildPath-->addExternalJARs e importate tutte con un click.
Dopo aver scritto il programma che su eclipse funziona correttamente volevo lanciarlo da riga di comando senza aprire eclipse, quindi ho fatto un export .jar. Solo che facendo così non mi inserisce tutte le librerie di axis.

Allora ho provato a importare le librerie .jar prima copiandole (copia incolla) nel mio progetto in una cartella lib e poi facendo al project-->properties-->JavaBuildPath-->addJARs e prenderle stesso dal mio progetto.
Ora quando faccio un export .jar nel mio file .jar ho anche una cartella lib con tutte le librerie.

Fino a qui c'è qualche errore?

poi ho provato a creare un file nel progetto META-INF/MANIFEST.MF e scrivere:

Codice: Seleziona tutto

Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: org.meteo.RichiesteMeteo
Class-Path: lib/activation-1.1.jar lib/annogen-0.1.0.jar

il problema è che inserire 59 scritte a manina è antipatico... non c'è un modo per farlo creare da eclipse? ho provato ad inserire solo le prime due librerie ma mi da un errore (quando lo eseguo con: java -jar meteo.jar) del tipo:

Codice: Seleziona tutto

Failed to load Main-Class manifest attribute from
meteo.jar
che non credo abbia a che fare con il classpath sbagliato.

per quanto riguarda questo:
[QUOTE=Stoned]1) Lanci il programma usando l'opzione -classpath seguita da tutte le librerie che usi[/QUOTE]
non ho provato sempre per lo stesso problema... 59 ClassPath per 59 .jar :(

Sto messo molto male a "nozioni"? :(
Ultima modifica di daemon_nio il giovedì 6 dicembre 2007, 11:52, modificato 1 volta in totale.
Sempre costruendo qualcosa di nuovo: Matag: The Game
Avatar utente
daemon_nio
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1012
Iscrizione: lunedì 15 gennaio 2007, 14:18
Sesso: Maschile
Località: London
Contatti:

Re: portare programma fuori da eclipse

Messaggio da daemon_nio »

Allora mi sono accorto che quando faccio export--> JAR, mi sostituisce automaticamente il file META-INF/MANIFEST.MF con uno di default come dice qui.

io sono andato a riscrivere il mio MANIFEST.MF con questo comando:

Codice: Seleziona tutto

jar ufm ClientMeteo.jar MANIFEST.MF
ma quando lo eseguo mi da quest'errore:

Codice: Seleziona tutto

[root@artax Desktop]# java -jar ClientMeteo.jar
Exception in thread "main" java.io.IOException: line too long
        at java.util.jar.Attributes.read(Unknown Source)
        at java.util.jar.Manifest.read(Unknown Source)
        at java.util.jar.Manifest.<init>(Unknown Source)
        at java.util.jar.JarFile.getManifestFromReference(Unknown Source)
        at java.util.jar.JarFile.getManifest(Unknown Source)
il mio manifest è questo:

Codice: Seleziona tutto

Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: org.meteo.RichiesteMeteo
Class-Path: lib/activation-1.1.jar lib/commons-logging-1.1.jar lib/annogen-0.1.0.jar lib/geronimo-annotation_1.0_spec-1.1.jar lib/axiom-api-1.2.5.jar lib/geronimo-jms_1.1_spec-1.1.jar lib/axiom-dom-1.2.5.jar lib/httpcore-4.0-alpha5.jar lib/axiom-impl-1.2.5.jar lib/httpcore-nio-4.0-alpha5.jar lib/axis2-adb-1.3.jar lib/httpcore-niossl-4.0-alpha5.jar lib/axis2-adb-codegen-1.3.jar lib/jalopy-1.5rc3.jar lib/axis2-ant-plugin-1.3.jar lib/jaxb-api-2.0.jar lib/axis2-clustering-1.3.jar lib/jaxb-impl-2.0.5.jar lib/axis2-codegen-1.3.jar lib/jaxb-xjc-2.0.5.jar lib/axis2-fastinfoset-1.3.jar lib/jaxen-1.1.1.jar lib/axis2-java2wsdl-1.3.jar lib/jettison-1.0-RC1.jar lib/axis2-jaxbri-1.3.jar lib/jibx-bind-1.1.5.jar lib/axis2-jaxws-1.3.jar lib/jibx-run-1.1.5.jar lib/axis2-jaxws-api-1.3.jar lib/juli-6.0.10.jar lib/axis2-jibx-1.3.jar lib/log4j-1.2.14.jar lib/axis2-json-1.3.jar lib/mail-1.4.jar lib/axis2-jws-api-1.3.jar lib/mex-impl-1.3.jar lib/axis2-kernel-1.3.jar lib/neethi-2.0.2.jar lib/axis2-metadata-1.3.jar lib/soapmonitor-1.3.jar lib/axis2-mtompolicy-1.3.jar lib/stax-api-1.0.1.jar lib/axis2-saaj-1.3.jar lib/tribes-6.0.10.jar lib/axis2-saaj-api-1.3.jar lib/woden-1.0-incubating-M7b.jar lib/axis2-spring-1.3.jar lib/wsdl4j-1.6.2.jar lib/axis2-xmlbeans-1.3.jar lib/wstx-asl-3.2.1.jar lib/backport-util-concurrent-2.2.jar lib/xalan-2.7.0.jar lib/commons-codec-1.3.jar lib/xbean-2.2.0.jar lib/commons-fileupload-1.1.1.jar lib/xercesImpl-2.8.1.jar lib/commons-httpclient-3.0.1.jar lib/xml-apis-1.3.03.jar lib/commons-io-1.2.jar lib/XmlSchema-1.3.2.jar

dove ho messo nella cartella lib del jar tutte quelle librerie .jar

**EDIT
Uffi mi sono accorto che quando faccio export-->JAR mi crea la cartella lib vuota non mettendomi i file .jar. Credo sia quello il motivo del mio NON funzionamento :(
  EDIT**

Sapete aiutarmi?
Ma non c'è un modo da eclipse per fare tutto in automatico? Non posso crederci che queste cose si facciano a mano :(
Ultima modifica di daemon_nio il venerdì 7 dicembre 2007, 11:10, modificato 1 volta in totale.
Sempre costruendo qualcosa di nuovo: Matag: The Game
Avatar utente
Massimo S.
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1931
Iscrizione: giovedì 28 settembre 2006, 14:34

Re: portare programma fuori da eclipse

Messaggio da Massimo S. »

Non so aiutarti su Eclipse perché non lo uso.

Effetivamente la piattaforma java è carente su questo punto, ovvero far partire una applicazione java stand-alone complessa.
Paradossalmente è più semplice deployare una Web Application o un EJB sun un application server.

Di solito per le app. stand-alone si creano file .sh e/o .bat che preparano il classpath e altri parametri er poi avviano l'applicazione.

Forse ti può essere d'aiuto questo
http://commons.apache.org/launcher/

Se usi axis dovresti avere già familiarità con il mondo delle librerie e componenti riusabili java della Apache Foundation
Avatar utente
daemon_nio
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1012
Iscrizione: lunedì 15 gennaio 2007, 14:18
Sesso: Maschile
Località: London
Contatti:

Re: portare programma fuori da eclipse

Messaggio da daemon_nio »

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:

Codice: Seleziona tutto

java -jar nomeFile.jar
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  ;D

e vedere il sorriso sulle labbra di Mr. Java (good)
Ultima modifica di daemon_nio il mercoledì 24 settembre 2008, 22:16, modificato 1 volta in totale.
Sempre costruendo qualcosa di nuovo: Matag: The Game
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti