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 ein InputStream erfordert der zweite parameter ein Path (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
InformationsquelleAutor pepuch | 2013-05-20
Schreibe einen Kommentar