2016-06-20 6 views
3

Ich habe einen Code geschrieben, die mit diesem Code zu 1.jarWie findet man eine lokale Ressource aus einem abhängigen Jar?

gepackt:

return isProd? "/etc/waze/automation/devices.json": 
      DeviceRepositoryFromJsonFile.class.getClassLoader().getResource("devices.json").getPath().toString(); 

devices.json ist hier:

enter image description here

habe ich ein anderes Projekt, das auf 1.jar hängt

jedoch die classLoader findet nicht die lokale devices.json Datei, sondern eine im Glas verpackte

Jedenfalls zeigt es die Datei nicht existiert.

enter image description here

Wie kann ich dieses Problem beheben? nutze doch einfach einen absoluten weg?

+0

Wo befinden sich die lokalen devices.json? Ich würde eher empfehlen, dass Sie es relativ zum Classpath platzieren, damit es irgendwo vom Classloader gefunden werden kann. – LynxZh

+0

Ich habe meinen Standort hinzugefügt. Kannst du bitte ein Beispiel dafür geben, was du vorschlägst? –

Antwort

1

Wenn Sie wie in Ihrem Screenshot die devices.json in den src/main/resources finden und das Paket erfolgreich als Paketpfad behandeln und in das JAR-Dateistammverzeichnis einfügen, dann finden Sie die Datei einfach über:

Beachten Sie, dass der Schrägstrich "/" wichtig ist, um anzuzeigen, dass aus dem Stamm des Klassenpfads gesucht werden soll.

1

Es beantwortet Ihre Frage nicht direkt, aber es kann Ihre Probleme schneller lösen.

Soweit ich sehe, versuchen Sie, den absoluten Pfad zu JSON-Datei zu erkennen und übergeben Sie es an eine andere Methode, damit diese Datei verarbeitet werden konnte. Stattdessen könnte es getan einfacher sein: Der gemeinsame Weg

public byte[] getDevicesJsonBytes() { 
    return isProd 
     ? IOUtils.toByteArray(ABSOLUTE_PATH_TO_PROD_FILE) 
     : IOUtils.toByteArray(DeviceRepositoryFromJsonFile.class.getResourceAsStream(RESOURCE_CLASSPATH); 
} 

Classpath Ressourcen zu lesen, es getResourceAsStream auf class oder classLoader Instanz zu verwenden. Außerdem haben viele Frameworks ihre eigenen Ressourcen-Abstraktionen, aber ich nehme an, dass Sie sie jetzt nicht brauchen.

Verwandte Themen