2014-09-22 63 views
14

我在JAR归档中有.class和.java文件。有没有什么办法从中只提取.java文件? 我试过这个命令,但它不工作:JAR - 提取特定文件

jar xf jar-file.jar *.java 
+0

为什么不提取所有文件并删除不需要的文件? – Strikeskids 2014-09-22 11:24:47

+0

这个JAR从哪里来?将源代码和类文件打包到相同的JAR中并不是一个好习惯...... – Puce 2014-09-22 11:27:32

+0

因为它更丑陋,速度更慢。那里有大约10000个文件。 – user3521479 2014-09-22 11:30:57

回答

17

可以使用unzip命令它接受在它的参数通配符(其不是jar命令的情况下)。这样的事情应该做的伎俩(免责声明:未测试)

unzip youFile.jar "*.java" 
+0

太棒了!它的工作原理,谢谢:) – user3521479 2014-09-22 11:47:14

15

source:

从一个jar文件中提取的某些文件,提供它们的文件名:

C:\Java> jar xf myFile.jar foo bar

使用通配符是一个shell的东西,你不应该指望它工作时从JAR文件中解压出(正如你所认识到的那样)。

可以做什么,是供应要提取的文件列表,通过@修改:

jar xf my.jar @myfiles.lst 

其中myfiles.lst是:

com/my/MyClass.java 
com/my/MySecondClass.java 

该文件可能可以通过创造性地使用jar tvf,awk和您想要的提取模式自动创建。我会把它作为一个练习和/或另一个SO问题:-)

或者你可以使用unzip - 一个JAR文件基本上是一个zip文件。

干杯,

+0

好吧,我知道它,这是在文档中,但没有jar支持任何正则表达式?我没有找到它:/ – user3521479 2014-09-22 11:40:02

-1

不应该有任何* .java文件在一个罐子里,只有类文件。您可以先运行以下内容来检查罐子的内容:

jar tvf jar-file.jar