Mostra risultati da 1 a 1 di 1

Discussione: Problema compilazione Java da Geany (o da terminale attraverso geany)

  1. #1
    Data registrazione
    Jan 2010
    Sesso
    Uomo
    Messaggi
    16,747
    Grazie dati 
    4,758
    Grazie ricevuti 
    2,541
    Ringraziato in
    2,145 post

    Problema compilazione Java da Geany (o da terminale attraverso geany)



    Premessa: Non sapevo se aprirla qui o nella sezione programmare, ho pensato che era più un problema di ambiente che di sorgente, quindi andava bene qui, spero di non aver sbagliato.

    Da un po' di tempo ho eliminato eclipse perché per le mie quattro cavolate in Java era diventato troppo pieno di roba e di conseguenza sempre più lento ad ogni aggiornamento (senza contare i problemi di dipendenze e compatibilità gtk/qt).

    Per ora sto usando Geany, consigliatomi in tempi non sospetti da Pierino89, e che già uso con successo sia per bash (anche se per quest'ultimo è meno preciso nel colorare la sintassi) e html/php.

    Ma con Java ho un problema extra per quanto riguarda la compilazione... il pulsante per lanciare la compilazione di default non funziona, non so se sia buggato, obsoleto, o se sia un problema mio, in ogni caso succede che Geany di default lancia il comando all'interno del package in cui sta la classe, mentre javac vuole il percorso assoluto o comunque comprensivo del package, per cui ho dovuto sostituire il comando con questo:

    Codice:
    Only registered members can view code.
    Che in pratica salva il nome della dir corrente, fa il call dir all'indietro e lancia il comando con path "assoluto" rispetto al package.

    Se il package di una classe è "nomeprogramma" in "qualchemiadir/nomeprogramma", il comando dev'essere per forza "javac nomeprogramma/Classe.java" altrimenti non compila.

    Tuttavia ancora non basta. Il problema si ripresenta quando devo compilare classi all'interno di un sotto-package,
    che a livello di directory è proprio una sotto-directory...

    Per qualche motivo (geany o javac) non riesce a compilare le classi a catena, seppur vengono chiamate nel sorgente.
    Sembra che compili in automatico solo quelle nello stesso package della classe su cui chiamo javac, quelle nei sottopackage vengono ignorate.

    Solo che per lanciare il comando diretto sulla classe nel sottopackage, occore, come sopra, specificare il percorso completo del package, quindi composto delle due sottodirectory, altrimenti non compila.

    Se il package di una classe è "nomeprogramma.alcunecose" in "qualchemiadir/nomeprogramma/alcunecose", il comando dev'essere per forza "javac nomeprogramma/alcunecose/Classe.java" altrimenti non compila.

    Inutile dire che non posso barare sulla dichiarazione dei package nel sorgente, perché non servirebbe a nulla, se non, forse, a essere peggio della soluzione.

    Siccome io ho il vizio di compilare a macchinetta per ogni minima modifica del sorgente mi scoccia parecchio se tutte le volte devo lanciare il comando sulla classe in modo separato.

    Avevo pensato di provare a sostituire il comando con uno script che si occupi di chiamare la compilazione su tutte le classi che trova nella dir, dovrei comunque vedere l'output di eventuali errori in geany.

    Però prima di impegnarmi per fare lo script vorrei vedere se qualcuno ha idee migliori.






    Edit 12/09:

    Toccando ferro pare che io abbia risolto con questo comando:

    Codice:
    Only registered members can view code.
    È comunque un mezzo script, ma in sostanza fa il find di tutte le classi appartenenti alla dir in cui viene eseguito e passa l'output con tanto di percorsi completi di package a javac, che in questo modo è forzato a processare tutte le classi.

    ps: ho scoperto che il problema deriva dal fatto che javac confronta la data dei .class esistenti con i .java e ignora quelli che non risultano modificati, per cui se la classe modificata viene richiamata solo da una classe non modificata, la chiamata a tale classe non sarà processate e quindi la classe non sarà ricompilata.

    L'unica cosa che non ho capito è se chiamando le classi letteralmente la compilazione viene forzata anche se non necessaria, ma se è l'unica soluzione non è certo il male peggiore.
    Ultima modifica di Andy86; 12-09-16 alle 13: 29.
    «Nessuna quantità di esperimenti potrà dimostrare che ho ragione;
    un unico esperimento potrà dimostrare che ho sbagliato.
    » (A. Einstein)

    Rispondi citando Rispondi citando Il mio PC

  2. # ADS
    Google Adsense Circuito Adsense
    Data registrazione
    da sempre
    Messaggi
    molti
     

Segnalibri

Regole di scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Cookies:direttiva 2009/136/CE (E-Privacy)

Il sito utilizza cookies propri e di terze parti per maggiori informazioni faq - Termini di servizio - Cookies
Il forum non puo' funzionare senza l'uso dei cookies pertanto l'uso della community è vincolato dall'accettazione degli stessi, nel caso contrario siete pregati di lasciare la community, proseguendo la navigazione acconsenti all’uso dei cookie