Questo è piuttosto bizzarro. È sembra come il problema è che quando si esegue java
come utente non privilegiato non è possibile trovare o leggere il file ".class". Ma quando si esegue come "root", è possibile.
Questo suggerisce che in qualche modo sei riuscito a creare il file "HelloWorld.class" con il proprietario sbagliato e/o le autorizzazioni sbagliate.
Verificare le autorizzazioni eseguendo ls -l HelloWorld.class
. Il proprietario deve essere il tuo account utente (non "root") e hai bisogno dell'autorizzazione di lettura dell'utente sul file.
Qui ci sono un paio di altre possibili spiegazioni:
Il comando java
si esegue potrebbe non essere quello che si pensa che è. Controlla cosa dice which java
quando lo fai da solo. Verifica che sia l'eseguibile "reale" java
e non alcuni script o qualcosa nella directory corrente o qualche altra directory che non sarà nella root/sudo $PATH
.
È possibile che sia stata impostata la variabile di ambiente CLASSPATH
in modo che la directory corrente (dove "HelloWorld.class" è ... presumo) non si trovi nel classpath. Ma quando si sudo java
, il comando java
è in esecuzione con un ambiente in cui $CLASSPATH
non è impostato. In tal caso, se non è presente l'argomento -cp
, verrà visualizzato un percorso di classe predefinito costituito da solo "."
; cioè la directory corrente.
Se il problema risulta essere la variabile d'ambiente CLASSPATH, vi consiglio di unset ... e modificare i file "RC" della vostra shell di disinserire anche lì.
Utilizzare invece il comando '-cp' sul comando java
, il comando javac
e così via ... e passare a Ant o Maven o a un IDE per la creazione e l'esecuzione del codice. (Oppure potresti scrivere alcuni piccoli script di wrapper come lanciatori di applicazioni.)
Non dipende dalla variabile di ambiente CLASSPATH. È suscettibile di darti brutte sorprese, specialmente se passi da un progetto di codifica all'altro. (Certamente non dipendono da esso nell'ambiente di produzione!)
fonte
2013-07-05 07:00:45
Hai il permesso di esecuzione per 'java' sotto il tuo utente? – MadProgrammer
Hai accidentalmente compilato come superutente? –
@MadProgrammer Come posso verificarlo? –