getResourceAsStream() nicht sehen, Ressource
Will ich entpacken Ressourcen aus meine jar-Datei. Die Struktur der jar sieht so aus:
my.jar
META-INF
resources
my.exe
my.dll
my
namespace
UnpackResourceFromThisClass.class
Ich entpacken möchte my.exe und my.dll aus der jar-Datei. Ich versuchte, entpacken Sie die Dateien mit diesem code:
try {
InputStream is = getClass().getResourceAsStream("/resources/my.exe")
OutputStream os = new FileOutputStream(new File(destDir))
Files.copy(is, os)
os.close()
is.close()
}
catch (NullPointerException e) {
e.printStackTrace();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (SecurityException e) {
e.printStackTrace();
}
aber es funktioniert nicht. Irgendwelche Ideen? Als Ergebnis bekomme ich diesen Fehler:
java.lang.NullPointerException
at java.nio.file.Files.provider(Files.java:65)
at java.nio.file.Files.newInputStream(Files.java:106)
at java.nio.file.Files.copy(Files.java:2884)
at java_nio_file_Files$copy.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
at pl.ydp.gradle.Is2k8Task.getResources(Is2k8Task.groovy:84)
at pl.ydp.gradle.Is2k8Task.build(Is2k8Task.groovy:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1047)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:877)
at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:216)
Dies ist groovy-code, die verwendet werden, in gradle benutzerdefinierte Aufgabe.
- Ich würde a) überprüfen Sie, dass die .exe ist effektiv verpackt, innerhalb der jar-Datei und b) überprüfen Sie die
Files.copy()
Methode, die version, die akzeptiert einInputStream
erfordert der zweite parameter einPath
(warum dies nicht zu einem compile-Fehler ist mir schleierhaft) docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html - "warum diese nicht zu einem compile-Fehler, ist mir unbegreiflich" Groovy zu sein scheint, casting, die Nummer der Zeile, in der Stapel-Ablaufverfolgung zeigt an, das erste argument ist ein Pfad
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheinen Sie zu schreiben Java... Nicht sicher, ob dieser erhalten Sie rund um Ihre problem, aber die oben geschrieben werden kann in Groovy:
Caused by: java.io.FileNotFoundException: JAR entry resources/my.exe not found in C:\workspace-eclipse-juno\Is2k8\repo\pl\ydp\gradle\is2k8\0.9\is2k8-0.9.jar
. Ich' Sie sicher, dassmy.exe
ist in der jar-Datei.Löschen Sie den führenden slash, getResourceAsStream wird, verwenden Sie einen absoluten Pfad an, wenn das erste Zeichen ein slash.
/
wird es laden von jar-root-Verzeichnis und ohne/
laden Sie von dir wo die Klasse vorhanden ist?