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

    Compilare ed eseguire più file .java in package diversi

    Salve.
    Usando NetBeans andava tutto in automatico ma, dovendo costruirmi le basi del funzionamento di Java, sto operando con un editor più "rudimentale" invocando poi javac e java da prompt.

    Ora, ho creato questo file .java semplicissimo:
    codice:
    package file.annidato;
    
    
    public class ProgrammaConPackage { 
    	public static void main(String[] args) { 
    		System.out.println("Ciao!"); 
    	} 
    }
    e l'ho salvato in una cartella "annidato" della cartella "file" della cartella "Codici".
    Portato il prompt nella cartella "Codici" ho compilato con
    codice:
    javac file/annidato/ProgrammaConPackage.java
    e poi eseguito con
    codice:
    java file.annidato.ProgrammaConPackage
    Fin qua tutto liscio e lineare...
    Non mi è chiaro il discorso se ho una classe test col metodo main() in un certo package (fisicamente in una certa sottocartella di "Codici") e un'altra classe worker in un altro package dentro "Codici": per compilare senza errori, oltre a indicare i package in cima ai rispettivi codici, effettuo anche un import del package dove si trova la classe worker all'interno della classe test.
    Vorrei sapere se tale procedura è corretta (dato che il programma viene eseguito) o se, come credevo approcciandomi a questa faccenda, c'è da impostare un classpath ulteriore oltre a quello per far funzionare Java stesso: istruzione che ho trovato più volte ma che a quanto pare a me non è servita.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Compilare "a mano" (con i tools del JDK), specialmente se ci sono di mezzo i package e possibilmente anche più di uno .... non è il massimo della comodità. Ma si fa, se necessario o si vuole.

    In particolare se tu hai una classe "principale" (non pensare necessariamente ad una che ha il main()) che tecnicamente usa (in)direttamente TUTTO il resto delle classi, come caso limite ti basta dare il javac per compilare solo questa classe principale. Il javac userà .class o .java a seconda di cosa trova.


    Dato:

    xyz\uno\Principale.java
    e
    xyz\due\AltraClasse.java

    (xyz = qualunque directory)

    codice:
    package uno;
    
    import due.AltraClasse;
    
    public class Principale {
        public static void main(String[] args) {
            new AltraClasse();
        }
    }
    codice:
    package due;
    
    public class AltraClasse {
        public AltraClasse() {
            System.out.println("AltraClasse()");
        }
    }

    Visto che Principale usa AltraClasse, basta fare

    1) posizionarsi nella directory che contiene i package "radice":
    cd xyz

    2) compilare con
    javac -cp . uno\Principale.java

    Il javac non troverà subito un due\AltraClasse.class ma trova il suo .java e lo compila.

    Ho usato -cp . solo per rendere evidente che la directory xyz deve essere "in classpath".


    P.S. leggi anche la documentazione di javac, in particolare: Searching for Types
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Grazie del link, ho sempre qualche difficoltà a muovermi nella documentazione ufficiale: cerco cerco e trovo prima da fonti "apocrife".
    Quindi la via che ho seguito è corretta, dato che, nomi a parte, i codici sono identici ai miei, a parte poi il comando
    codice:
    -cp .

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    a parte poi il comando
    codice:
    -cp .
    E' solo importante che la "xyz" (come sopra) sia in classpath. Poi se lo è con path assoluto, path relativo, tramite opzione -cp o tramite variabile di ambiente CLASSPATH o per default nella directory corrente (se non c'è -cp né CLASSPATH) .... cambia nulla.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.