2010-01-15 7 views
7

Il nostro progetto in Eclipse mostra approssimativamente le seguenti cartelle:Eclipse: l'esportazione in .jar e comprendono i file di risorse (ANT)

application 
    - src 
    - JRE System Library [1.6] 
    - Referenced Libraries 
    - lib 
    - rsc 

Nel nostro progetto, vorremmo utilizzare File> Esporta ...> Executable JAR

Bene che funziona bene, con qualche eccezione: se vogliamo eseguire il nostro application.jar, dobbiamo ancora copiare la cartella rsc/nella stessa posizione di application.jar.

In rsc /, abbiamo altre cartelle per la separazione delle diverse parti. In sostanza, abbiamo caricare i pezzi usando il codice (ben un po 'alterato, ma lo stile percorso è corretto)

strUrl = "file:rsc/properties/Constants.properties"; 
url = new URL(strUrl); 
ImageIcon icon = new ImageIcon(url); 

potevo fare clic destro su rsc Percorso> Usa come cartella di origine /> costruire.

Ma questo non funziona perché eclipse non copia automaticamente la cartella rsc nella cartella bin /. E quindi non possiamo eseguirlo più dal terminale (non impacchettato nel contenitore)

MODIFICA: perché eclipse non è in grado di gestirlo correttamente? Perché ha problemi con le cartelle di output "nidificate"? Nella scheda Source della finestra di dialogo Build Path, posso facilmente aggiungere rsc/-folder con la cartella di output impostata su bin/rsc /, ma non sembra in grado di mettere cartelle nidificate ...


EDIT 2: Ora sono stato in grado di creare un file xml per creare materiale con formica e in qualche modo è riuscito a includere la cartella rsc direttamente nel jar. Ancora non funziona a causa degli stessi errori. Devo davvero controllare i percorsi delle risorse, che siano in una JAR o no? Il contenuto del JAR è ora la seguente:

META-INF/ 
META-INF/MANIFEST.MF 
configurator/ 
controller/ 
editor/ 
gui/ 
logic/ 
networking/ 
rsc/ 
rsc/gamesettings/ 
rsc/levels/ 
rsc/pics/ 
rsc/properties/ 
util/ 

ma Java mi odia ancora e lancia java.io.FileNotFoundException: rsc/properties/Constants.properties con uno stacktrace di circa 100 linee.


qualcuno un'idea come si fa? thx & saluti

risposta

15

Se si contrassegna rsc come una cartella di origine Eclipse copierà il suo contenuto nella directory di output. O potresti semplicemente spostare rsc sotto src se vuoi raggruppare le risorse nell'output.

Quindi è possibile utilizzare Class.getResource("/properties/Constants.properties") o Class.getResource("/rsc/properties/Constants.properties") e funzionerà a prescindere se la propria app è confezionata come jar o in esecuzione dalla sorgente.

Come sidenote, il protocollo file: funziona solo con i file normali, per accedere ai file all'interno del jar è necessario utilizzare qualcosa come new URL("jar:file:app.jar!/rsc/properties/Constants.properties").

+0

Sì. Questa era la soluzione, ma la marcatura di rsc/as src-folder in eclissi non ha funzionato. Un altro studente mi ha portato direttamente alla stessa soluzione. Il problema era che dovevamo usare Class.getResource ("..."), il percorso preceduto da un '/'. per quanto riguarda – Atmocreations

+0

Mi spiace, cosa intendi per 'Class # getResource()'? Non esiste un metodo statico nella classe 'Class'. – m0skit0

+0

@ m0skit0 Il metodo non è statico, mi dispiace per la confusione. –

2

Per questo tipo di utilizzo, consiglio di utilizzare Maven, operazione che viene eseguita automaticamente durante la creazione di un jar. C'è anche an Eclipse plugin.

È inoltre possibile utilizzare Ant.

+0

thx, so che questo tipo di strumenti esistono. Ma non ho alcuna esperienza con loro e la mia opinione è che se eclipse fornisce uno strumento per creare un jar eseguibile, immagino dovrebbe essere possibile semplicemente aggiungere un'altra cartella al jar senza modificarlo. – Atmocreations

4

Si potrebbe provare: Nella finestra di dialogo Percorso build Java, andare alla scheda Librerie e selezionare "Aggiungi cartella di classe ...". Selezionare rsc dalla finestra di dialogo Selezione cartella di classe. Il contenuto della directory rsc verrà ora incluso nel file jar eseguibile.

(Si noti che RSC stesso non saranno inclusi, quindi potrebbe essere necessario aggiungere una nuova sottodirectory RSC per rendere la struttura di directory nella destra barattolo.)

+0

per la tua risposta. Beh, sì, funzionerebbe. Ma il problema è che non posso spostare questi oggetti in rsc/rsc/perché la corsa locale (senza la creazione del file jar) non funzionerebbe più ... – Atmocreations

1

faccio questo di solito manualmente, nel tuo caso jar -uf foo.jar rsc che include tutte le risorse. È possibile scrivere uno script o farlo in formica

1

Come si dice in Edit 2 di avere tutto in un barattolo, questo dovrebbe funzionare:

String path = "rsc/img/img.gif"; 
URL url = this.getClass().getResource(path); 
ImageIcon icon = new ImageIcon(url); 
+0

Grazie per la risposta. Devo dire che "this.getClass()" si trova in src/util/ Provalo – Atmocreations

Problemi correlati