2013-05-19 15 views
8

So che ci sono molte domande "impossibile accedere a jarfile" qui, ma ritengo che questo sia abbastanza diverso da giustificare il proprio thread.Impossibile accedere a jarfile sotto cygwin

Sto scrivendo una procedura dettagliata, parte di questa procedura dettagliata prevede l'installazione di Cygwin e l'esecuzione di un file .jar.

Il problema è che questo file .jar deve essere chiamato da più directory, e piuttosto che i miei lettori devono inserire il percorso completo per il .jar ogni volta che devono eseguirlo, vorrei che solo loro è necessario immettere il comando file .jar dopo aver effettuato una semplice configurazione su Cygwin.

Ho provato ad aggiungere il PERCORSO a ~/.bashrc e ho anche provato ad aggiungere CLASSPATH, ma non ho avuto successo.

Ogni volta invoco java -jar file.jar ottengo Error: Unable to access jarfile file.jar

Cosa devo fare per risolvere questo?

[Edit]

Ho parlato con mio fratello-in-law, che sa un po 'di Linux, e lui ha suggerito che creo un wrapper per eseguire il vaso, ho avuto una rapida ricerca, ma non riesce a trovare nulla di semplice.

Qualche suggerimento?

risposta

7

Cygwin fornisce già un modo per convertire tra percorsi stile UNIX (POSIX) e percorsi di stile Windows (MS-DOS), si chiama "cygpath".

Prova:

java -jar `cygpath -w ./foo/bar/file.jar command file.1 file.2` 

Nota: Quelli sono backticks che circondano l'invocazione cygpath.

L'utilizzo di cygpath elimina la necessità di scrivere il proprio script bash per inoltrare le cose e il file jar può essere posizionato in qualsiasi punto del computer.

8

java -jar file.jar funziona solo se file.jar si trova nella directory di lavoro corrente. In caso contrario, è necessario fornire il percorso per file.jar. Si noti che se si utilizza Oracle Java, è necessario essere consapevoli del fatto che si tratta di un programma Windows nativo e non comprende i percorsi * NIX di Cygwin.

Per quanto riguarda il consiglio di tuo cognato, ha ragione che i programmi Java vengono solitamente avviati tramite script wrapper su piattaforme * NIX. Se stai usando Oracle Java, sarà come:

#! /bin/sh 
exec java -jar $(cygpath -w /path/to/file.jar) "[email protected]" 
+0

Cheers - Sono appena riuscito a trovare una soluzione simile anch'io. Vedi "la mia risposta" sotto la quale stavo scrivendo quando hai risposto;) – Escribblings

2

OK, questo è stato risolto.

Sono riuscito a creare uno script bash che chiama il .jar e gli argomenti, e grazie a Bernie Zimmerman's Blog sono riuscito a farlo funzionare.

Il problema sembra essere che mentre Cygwin è un ambiente Linux che utilizza i nomi di file Posix, Java vuole ancora i nomi dei file di Windows.

Il file .jar in questione ha 2 comandi possibili e imposta questi comandi su un file e crea un altro file.

Così ora posso sostituire

java -jar ./foo/bar/file.jar command file.1 file.2

con

jar.sh command file.1 file.2

lo script bash che ho creato è:

#!/bin/bash
java -jar "C:\foo\bar\file.jar" "$1" "$2" "$3"

Problemi correlati