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%)
相应的目录结构是
build/
test/
java/
foo/
SomeClass.class
Main.class
使用test\java\foo\SomeClass.class
作为最后一个参数时,它可以正常工作,这很奇怪。很好,但是当我为第一个参数执行相同操作时,这不起作用,即test\java\Main.class
。这种行为似乎非常不一致。
为什么找不到foo\SomeClass.class
,或者更好的是,创建Jar的正确方法是什么?
java版“1.8.0_102”
答案 0 :(得分:1)
您从命令行运行的可执行文件似乎从build
目录开始,因此,它不知道foo\SomeClass.class
文件相对于{{1}的位置这也解释了为什么build
有效(它知道如何找到相对于执行目录的文件)。
如果你在test\java\foo\SomeClass.class
内的顶层有foo
文件夹,我相信它会正常工作,但因为build
嵌套在两层目录中,所以可执行文件不知道在哪里查找当前目录中具有该名称的文件夹。
答案 1 :(得分:1)
我刚刚在以前没见过的文档页面中找到答案。
-C dir 在处理以下inputfiles参数时暂时将目录更改为dir。允许多个-C dir输入文件集。
显然,需要为每个输入放置-C
参数,而不只是指定一次。
来源:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jar.html