Compilazione file java da shell

di il
6 risposte

Compilazione file java da shell

Salve a tutti
Sono un nuovo Utente del forum
Ho un problemino ad utilizzare la shell di Windows per compilare un file sorgente .java
Diciamo che ho già smanettato molto sia nelle variabili di ambiente per settare Path e ClassPath settando la directory dove appunto sono presenti javac java javaw ecc

Nella shell sono riuscito per lo meno a far partire il compilatore per la traduzione del file UsoDiChar.java nel relativo .class, cambiando la directory di lavoro corrente con il comando cd C:\MY_JAVA_SOURCES

Il problema riguarda l esecuzione del file .class con il comando java UsoDiChar

L errore che mi da è " Errore: impossibile trovare o caricare la classe principale UsoDiChar"

Il codice di UsoDiChar è


package com.pellegrinoprincipe;

public class UsoDiChar
{
    public static void main(String[] args)
    {
        char ch = 82;
        System.out.println(ch); // stampa R
        ch++;                   // sposta al carattere successivo
        System.out.println(ch); // stampa S
    }
}
Ho letto su un manuale che per compilare i file bisognerebbe anteporre il nome del package al nome della classe
Quindi ancora java com.pellegrinoprincipe.UsoDiChar

Ma l errore si ripete lo stesso
Come potrei risolvere...

6 Risposte

  • Re: Compilazione file java da shell

    DomeJ1988 ha scritto:


    L errore che mi da è " Errore: impossibile trovare o caricare la classe principale UsoDiChar"
    Ci sono dei package (com.pellegrinoprincipe) in tutto questo, quindi va seguita la regola aurea dei package: i nomi dei package si devono SEMPRE "riflettere" nella struttura delle directory.

    Quindi:

    C:\blablabla\com\pellegrinoprincipe\UsoDiChar.java

    (blablabla, qualunque percorso tu voglia)

    Devi stare in C:\blablabla e dare

    javac com\pellegrinoprincipe\UsoDiChar.java

    Poi per avviare il main di UsoDiChar

    java com.pellegrinoprincipe.UsoDiChar

    Ma attenzione: la cartella C:\blablabla deve essere "in classpath". Come, dipende: con l'opzione -cp o con la variabile di ambiente CLASSPATH. Con path relativo (alla directory corrente) o assoluto.
  • Re: Compilazione file java da shell

    Ciao grazie per la risposta
    Ho provato ad inserire alla variabile di ambiente CLASSPATH il percorso

    C:\Users\dome8\Desktop\1704_codiceEsempio\CODICE\Cap02\Listati\UsoDiChar\src

    Dove appunto dopo src si trova la directorty

    com\pellegrinoprincipe

    Che contiene il file sorgente UsoDiChar.java

    lanciando il comando java com.pellegrinoprincipe.UsoDiChar non viene eseguito lo stesso, non saprei come risolvere
  • Re: Compilazione file java da shell

    DomeJ1988 ha scritto:


    Che contiene il file sorgente UsoDiChar.java
    Quando si avvia la JVM, ovviamente i sorgenti non contano più .... contano i file .class generati. Se hai seguito la procedura con il javac che ho detto prima, il UsoDiChar.class lo deve aver generato nella stessa directory dove c'è il sorgente.

    Ora conta solo più il "classpath". Concettualmente il classpath è semplicemente un elenco di directory e/o file .jar che la JVM scansiona per rintracciare le classi da caricare (e eventuali altre "risorse").
    Hai presente come funziona la PATH? (che non c'entra con Java, è a livello di sistema) Se tu da prompt lanci es. pippo.exe senza alcun path, il sistema va a cercare questo eseguibile in tutte le directory elencate nella PATH.
    Bene, il classpath è un concetto praticamente quasi uguale. Nel classpath ci devono essere delle "basi". Se si imposta:

    SET CLASSPATH=C:\aaa;C:\bbb;C:\ccc

    se la JVM deve caricare una classe es. com.esempio.Prova, allora converte questo in un path com\esempio\Prova.class e lo cerca sotto tutte le basi elencate nel classpath:

    Esiste un C:\aaa\com\esempio\Prova.class ? Sì, trovata; No, continua ricerca.
    Esiste un C:\bbb\com\esempio\Prova.class ? Sì, trovata; No, continua ricerca.
    Esiste un C:\ccc\com\esempio\Prova.class ? Sì, trovata; No, essendo l'ultimo la JVM fallisce.


    In sostanza: fai in modo che in classpath ci sia (in qualunque modo, con path assoluto o relativo) la directory che CONTIENE la "com" (che è il package "radice") dove sotto sotto ci sono la/e classi.
  • Re: Compilazione file java da shell

    Ciao, per provare a compilare il file java dalla shell ho fatto una cosa un po' "barbara" diciamo
    Ho salvato i sorgenti .java nella directory

    C:\MY_JAVA_SOURCES

    ed elimintato dai sorgenti le voci che specificano i package

    poi dalla shell che imposta come percorso di default C:\Users\dome8>, ho eseguito il comando

    C:\Users\dome8> cd C:\MY_JAVA_SOURCES
    ottenendo
    C:\MY_JAVA_SOURCES>
    Da qui invocando javac PrimoProgramma.java o javac UsoDiChar.java vengono compilati e creati i relativi file .class

    ed eseguendo java PrimoProgramma o java UsoDiChar vengono finalmente eseguiti

    Volevo provare ad lanciare i file specificando in classpath il percorso dei package che contengono i file .java ma non ci sono riuscito, ad esempio nella variabile di sistema Nella voce relativa a CLASSPATH ho impostato i due percorsi

    C:\Program Files\Java\jdk1.8.0_111\bin
    C:\Users\dome8\Desktop\1704_codiceEsempio\CODICE\Cap02\Listati\UsoDiChar\src\com\pellegrinoprincipe
  • Re: Compilazione file java da shell

    DomeJ1988 ha scritto:


    Ho salvato i sorgenti .java nella directory

    C:\MY_JAVA_SOURCES

    ed elimintato dai sorgenti le voci che specificano i package
    E visto che è un banalissimo programmino di prova/esperimento, va BENE e non c'è nulla di male nel togliere la dichiarazione di package (usando quindi implicitamente il package di "default").

    DomeJ1988 ha scritto:


    Volevo provare ad lanciare i file specificando in classpath il percorso dei package che contengono i file .java ma non ci sono riuscito, ad esempio nella variabile di sistema Nella voce relativa a CLASSPATH ho impostato i due percorsi

    C:\Program Files\Java\jdk1.8.0_111\bin
    C:\Users\dome8\Desktop\1704_codiceEsempio\CODICE\Cap02\Listati\UsoDiChar\src\com\pellegrinoprincipe
    Non si mette (e non serve) la "bin" del JDK in classpath!

    In classpath ci va la directory che fa da "base" del package radice. Se il package radice è "com" (che DEVE riflettersi in una cartella), allora in classpath va messa la directory che CONTIENE la "com".

    Quindi se il .class è in:

    C:\Users\dome8\Desktop\1704_codiceEsempio\CODICE\Cap02\Listati\UsoDiChar\src\com\pellegrinoprincipe\UsoDiChar.class

    allora la directory che va messa in classpath è la parte in ROSSO. Stop, tutto qui.
  • Re: Compilazione file java da shell

    Grazie mille per le precise risposte, riproverò come mi hai indicato!
Devi accedere o registrarti per scrivere nel forum
6 risposte