2016-09-24 4 views
0
build> jar cvfe test\MyJavaLibrary.jar Main -C test\java Main.class foo\SomeClass.class 
foo\SomeClass.class : no such file or directory 
added manifest 
adding: Main.class(in = 444) (out= 308)(deflated 30%) 

Die entsprechende Verzeichnisstruktur istjar Befehl Create nicht Datei

build/ 
    test/ 
    java/ 
     foo/ 
     SomeClass.class 
     Main.class 

Es ist sehr seltsam, dass es richtig funktioniert, wenn statt test\java\foo\SomeClass.class als letztes Argument verwendet wird. Gut, aber das funktioniert nicht, wenn ich das gleiche für das erste Argument tue, das ist test\java\Main.class. Das Verhalten scheint sehr inkonsistent zu sein.

Warum kann es foo\SomeClass.class nicht finden, oder besser, was ist der richtige Weg, um das Glas zu erstellen?

java version „1.8.0_102“

Antwort

1

Die ausführbare Datei, die Sie von der Kommandozeile ausführen erscheint im build Verzeichnis zu starten, und als solche, es weiß nicht, wo Die foo\SomeClass.class Datei ist relativ zu build - dies würde auch erklären, warum test\java\foo\SomeClass.class funktioniert (es weiß, wie man die Datei relativ zum Ausführungsverzeichnis findet).

Wenn Sie die foo Ordner auf der obersten Ebene innerhalb build haben sind, glaube ich, es wäre richtig funktionieren, sondern weil foo innerhalb von zwei Schichten von Verzeichnissen verschachtelt ist, hat die ausführbare Datei keine Ahnung, wo mit, dass für einen Ordner suchen Name in seinem aktuellen Verzeichnis.

+0

Aber das ist, was das '-C test \ java' Flag für ist, nicht wahr? Wie sonst würde es 'Main.class' finden? –

+0

Vielleicht ist nur der erste Pfad von der Option "-C test \ java" betroffen? –

+1

Sie haben Recht, das Argument wirkt sich nur auf die folgende Eingabedatei aus. Siehe die Antwort, die ich hinzugefügt habe. –

1

Ich fand die Antwort in einer Dokumentationsseite, die ich noch nicht gesehen habe.

-C Verzeichnis Temporäre Änderungen von Verzeichnissen zu dir während der Verarbeitung des folgenden Eingabedateiarguments. Mehrfach-C-Dir-Eingabedateigruppen sind zulässig.

Also offensichtlich das -C Argument müsste für jeden Eingang platziert werden, nicht nur einmal angegeben.

Quelle: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jar.html