Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Spostare eseguibili jar

    Salve a tutti,
    ho un problemino con un file jar eseguibile.
    Io ho creato questo file jar all'interno di una cartella "Progetto" posizionandomi con il prompt all'interno di tale cartella e digitando jar -cfm nomeFile.jar C:\META-INF\MANIFEST.MF bin\* lib\* doc\* src\*.
    questo è il contenuto del file manifesto
    Main-Class: MyPackage.MainClass
    Class-Path: bin\
    Il file jar che mi crea funziona pefettamente, se però sposto il file in un'altra cartella, ad esempio il desktop, e lo clicco 2 volte mi dà l'errore "Could not find the main class. Program will exit."
    Per favore potreste spiegarmi il motivo??
    Grazie a tutti in anticipo!
    Quando sei vecchio...approfitta sempre di un bagno, non sprecare mai un'erezione e non fidarti mai di una scorreggia.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Spostare eseguibili jar

    Originariamente inviato da FranKDR
    Per favore potreste spiegarmi il motivo??
    Mah ... innanzitutto bisognerebbe capire meglio cosa hai fatto e messo nelle varie directory. Se si vuole realizzare un jar dei "binari" cioè solo per eseguire l'applicazione, allora nel jar è sufficiente mettere i file .class (in cartelle che "riflettono" i package!) e le eventuali risorse (immagini o altro) se usate con getResource().

    Non capisco perché tiri dentro nel jar tutto quanto ... doc, src ecc.... Poi immagino che le classi stiano sotto la bin/ ma non puoi tirare dentro le classi tenendo alla base la bin!! Il fatto di specificare la bin in Class-Path: non vuol dire che poi va a cercare sotto la bin contenuta nel jar!!! Va a cercare solo sotto la bin sul file-system relativa alla posizione del jar!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Innanzitutto grazie per la risposta!
    Il mio è un piccolo progetto per l'università e il professore vuole che all'interno del jar ci siano le 4 cartelle:-src(con i file sorgenti) -bin(con il bytecode) -lib(con eventuali librerie) e -doc(con la documentazione).
    I file sorgenti li ho dichiarati appartenenti al package Progetto, quindi ho una struttura di cartelle così
    Progetto -->src-->Progetto--> *.java
    |
    -->bin-->Progetto--> *.class
    |
    -->doc-->Progetto--> *.html
    | |
    | --> *.html
    |
    -->lib--> *.txt (non usando librerie esterne ho messo 3 file di testo da cui leggo e su cui scrivo)
    e ho creato il file jar come avevo scritto sopra.
    Come lo devo creare per renderlo eseguibile da qualunque cartella del file system ma soprattutto anche da altri computer?
    Quando sei vecchio...approfitta sempre di un bagno, non sprecare mai un'erezione e non fidarti mai di una scorreggia.

  4. #4
    Ho scritto piuttosto male la struttra delle cartelle
    All'interno della cartella Progetto ci sono le cartelle -src -bin -doc -lib
    All'interno di src cè la cartella Progetto al cui interno ci sono i file sorgenti *.java
    All'interno di bin cè la cartella Progetto al cui interno ci sono i file compilati *.class
    All'interno di lib ci sono i 3 file di testo
    All'interno di doc cè la cartella Progetto al cui interno ci sono i file della documentazione *.html

    Il file manifesto invece è così
    Main-Class: Progetto.Project
    Class-Path: bin\

    Da quanto ho capito penso di aver fatto una bella schifezza VVoVe:
    Quando sei vecchio...approfitta sempre di un bagno, non sprecare mai un'erezione e non fidarti mai di una scorreggia.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da FranKDR
    -src(con i file sorgenti)
    Va beh ... se vuoi infilarci dentro i sorgenti, ok. Tanto non vengono di certo usati a runtime.

    Originariamente inviato da FranKDR
    -bin(con il bytecode)
    Qui la questione l'ho spiegata prima, ma la rispiego in altro modo: se una classe ha come nome completo com.pippo.Prova, nel jar ci deve essere un percorso:

    codice:
    file.jar
      \
       com
         \ 
          pippo
            \
             Prova.class
    Cioè 'com' deve essere alla radice del jar. Non ci può essere una 'bin' davanti se non è anch'essa un "package" dichiarato per la classe!!!

    Originariamente inviato da FranKDR
    -lib(con eventuali librerie)
    Immagino qui tu intenda altri jar di librerie di terze parti. Ma in ogni caso non funziona. La JVM non carica altri jar dentro un jar!!!

    Originariamente inviato da FranKDR
    -doc(con la documentazione)
    Idem come per i sorgenti. Se non vengono usati/caricati a runtime in qualche modo, puoi non metterli o anche metterli come/dove vuoi nel jar.

    Originariamente inviato da FranKDR
    Come lo devo creare per renderlo eseguibile da qualunque cartella del file system ma soprattutto anche da altri computer?

    il professore vuole che all'interno del jar ci siano le 4 cartelle
    Ehm ... così è un casino, il prof. probabilmente o chiede troppo o non ha capito come funzionano i jar ..... o entrambe le cose.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Grazie mille!
    Adesso riesco a lanciare il jar anche se lo sposto in altre cartelle, non facevo corrispondere il package dei miei file .class con il loro percorso nel jar!
    Approfitterei della tua gentilezza e preparazione per chiederti un'ultima cosa...
    Ho bisogno di mettere dentro al jar 1 file di testo da cui leggere con la classe FileReader.Il problema è che se passo come parametro al costruttore della classe FileReader il nome del file di testo quando lancio il jar da 1 altra cartella naturalmente non me lo trova più.
    Un'idea su come fare? Devo passare un altro argomento al costruttore di FileReader?
    Quando sei vecchio...approfitta sempre di un bagno, non sprecare mai un'erezione e non fidarti mai di una scorreggia.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da FranKDR
    Ho bisogno di mettere dentro al jar 1 file di testo da cui leggere con la classe FileReader.Il problema è che se passo come parametro al costruttore della classe FileReader il nome del file di testo quando lancio il jar da 1 altra cartella naturalmente non me lo trova più.
    Un'idea su come fare? Devo passare un altro argomento al costruttore di FileReader?
    Se il file si trova nel jar, allora va caricato come "risorsa". Non si può più usare File o una stringa che fanno riferimento al file-system e quindi nemmeno FileReader/FileInputStream.

    Il riferimento alla risorsa lo si può ottenere come URL o come InputStream, da due metodi getResource() / getResourceAsStream() di java.lang.Class o dal ClassLoader (in genere è più pratico dal Class).
    A questi due metodi si passa un nome della risorsa. Questo nome non è un normale "path" del file-system ma è una specifica della risorsa che deve seguire delle regole (si veda la documentazione).
    E sopratutto la cosa importante da capire è che la risorsa viene cercata usando lo stesso concetto che la JVM usa per cercare le classi.

    Data una classe:

    codice:
    package com.pippo;
    
    public class Prova {
        .... 
    
            InputStream is = Prova.class.getResource("res/pluto.gif");
    
    }
    Allora la JVM cercherà in "classpath" una risorsa: com/pippo/res/pluto.gif

    Vedi anche il tutorial ufficiale qui (lì parla di immagini ma il concetto non cambia)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.