Accesso alle risorse JAR

Ho un file jar con risorse (principalmente configurazione per cache, registrazione, ecc.) Che voglio distribuire.

Sto riscontrando un problema con i relativi percorsi per tali risorse, quindi ho fatto quello che ho trovato in un’altra domanda StackOverflow, che diceva che si trattava di un modo valido:

 ClassInTheSamePackageOfTheResource.class.getResourceAsStream('resource.xml'); 

Purtroppo questo non funziona.

Qualche idea? Grazie!

PS: Ovviamente non posso usare percorsi assoluti, e mi piacerebbe evitare le variabili di ambiente, se ansible

Assicurati che la tua cartella di risorse sia elencata come cartella di origine nelle impostazioni del tuo progetto. Inoltre, assicurati che la cartella delle risorse sia impostata per l’esportazione quando costruisci il tuo jar.

È ansible aggiungere un’estensione .zip al file jar e aprirlo per garantire che le risorse siano incluse e nella posizione prevista.

Io uso sempre percorsi assoluti come questo:

 InputStream input = this.getClass().getResourceAsStream("/image.gif"); 

Quando si utilizzano percorsi assoluti, “/” è la cartella radice nel file jar, non la cartella radice del computer host.

Devo sempre risolvere il getResourceAsStream con getResourceAsStream per farlo funzionare. Se “resource.xml” è in org/pablo/opus , penso che tu voglia questo:

 Name.class.getResourceAsStream("org.pablo.opus.resource.xml"); 

dove è stato trovato il file resource.xml? Se nella radice dell’albero di origine, provare a prefixarlo con /.

Solitamente memorizzo file e altre risorse e li recupero come URL:

 URL url = MyClass.class.getResource("/design/someResource.png"); 

All’interno di un contesto statico, o altrimenti:

 URL url = getClass().getResource("/design/someResource.png"); 

Da un’istanza.

I frammenti di cui sopra presuppongono che il design sia una cartella di livello superiore all’interno del jar. In generale, se il percorso inizia con una “/” assume un percorso assoluto, altrimenti è relativo dalla posizione della class.