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

    [JAVA] javac -classpath con package

    Salve,

    non riesco a compilare un programma e so per certo che l'errore dipende dal mio modo errato di usare l'opzione -classpath del compilatore javac.

    Ho queste cartelle:
    Codice PHP:
    classes
    |
    |
    __dati
    |   |__ImageCRUD.java
    |
    |
    __business
        
    |__Image.java 
    dove ImageCRUD dipende da Image.
    Dopo aver compilato con successo Image.java, mi posiziono nella cartella dati e do il seguente comando:

    javac -classpath "..\business\Image.class" ImageCRUD.java

    ma non trova il package dati. Ovviamente ho ben settato sia le istruzioni package che import nelle rispettive classi.

    PS: Sono sicuro che l'errore dipenda dall'istruzione javac per due motivi:
    1) se li compilo nella stessa cartella, senza le istruzioni package ed import, funzionano e 2) perchè mi da lo stesso identico errore anche se faccio un semplice javac ImageCRUD.java

    Qualche suggerimento?
    Grazie
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

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

    Re: [JAVA] javac -classpath con package

    Originariamente inviato da matthew80
    javac -classpath "..\business\Image.class" ImageCRUD.java

    ma non trova il package dati.
    Innanzitutto in classpath non vanno mai specificati file .class. Vanno messe o directory o file jar/zip e basta. E questa è la cosa più basilare.

    La seconda cosa è la questione dei package. La struttura dei package si deve sempre "riflettere" nella struttura delle directory. E in classpath va messa la directory che contiene il package base.

    Se si ha un file Pippo.java che contiene:

    codice:
    package com.topolinia;
    
    public class Pippo {
        ....
    }
    Il file .class deve stare tassativamente in un path com/topolinia. Ad esempio, su Windows, in:

    C:\TEMP\com\topolinia\Pippo.class

    E in classpath va messo C:\TEMP, cioè la directory che contiene il package base.

    Chiaro?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Posizionandomi nella cartella dati e digitando da prompt

    javac -classpath ..\business\* ImageCRUD.java

    Funziona!

    Grazie tante andbin...questo thread me lo stampo
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da matthew80
    Posizionandomi nella cartella dati e digitando da prompt

    javac -classpath ..\business\* ImageCRUD.java

    Funziona!
    Innanzitutto allora immagino che non stai usando i package. E comunque non capisco cosa ti serva, l'asterisco * non fa mai il match con file .class singoli. Cerca solo i file .jar.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Per capirci ecco le classi:

    1) classes/business/Image.java
    Codice PHP:
    package business;

    public class 
    Image{
       ...

    2) classes/dati/ImageCRUD.java
    Codice PHP:
    package dati;

    import business.Image;

    public class 
    ImageCRUD{
       ...

    Per compilare Image.java, dalla directory business, faccio javac Image.java --> OK
    Per compilare ImageCRUD.java, dalla directory dati, faccio javac -classpath ..\business\* ImageCRUD.java --> OK

    Come dovrei fare?
    Potrei impacchettare Image.class in un jar ma, essendo un solo file, non credo sia necessario.

    Suggerimenti per una corretta compilazione?
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da matthew80
    Suggerimenti per una corretta compilazione?
    Se noti la tua directory classes contiene i package base. Quindi è quella che deve stare in classpath! (l'avevo spiegato sopra)

    Mettiti come directory corrente in \classes, poi:

    codice:
    javac -classpath . business\Image.java
    javac -classpath . dati\ImageCRUD.java
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Come sempre...hai ragione!
    Ora mi stampo il thread e lo metto tra i miei appunti
    Secondo me dovresti scrivere qualche guida su Java...sono certo che sarebbe ottima. Io me la comprerei
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

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.