JAR - 提取特定文件

39

我有一个JAR档案,其中有.class和.java文件。有没有办法仅从中提取出.java文件? 我尝试了这个命令,但它不起作用:

jar xf jar-file.jar *.java

1
为什么不直接提取所有文件,然后删除您不需要的文件呢? - Strikeskids
1
这个JAR文件来自哪里?在同一个JAR文件中打包源代码和类文件不是一个好的做法... - Puce
3
因为这种方法更丑陋而且速度较慢。那里大约有一万个文件。 - user3521479
3个回答

52

源代码:

如果要从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 tvfawk 和所需的提取模式可以很容易地自动创建此文件。我将把它留作练习和/或另一个 SO 问题 :-)

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

干杯,


好的,我知道,这在文档中有提到,但是 jar 是否支持任何正则表达式呢?我在任何地方都没有找到它 :/ - user3521479

41

您可以使用unzip命令,该命令在其参数中接受通配符(这不是jar命令的情况)。类似于以下内容应该就能解决问题(免责声明:未经测试)

unzip youFile.jar "*.java"

-6

在一个 jar 文件中不应该有任何 *.java 文件,只能是 class 文件。你可以通过运行以下命令来查看 jar 文件的内容:

jar tvf jar-file.jar

2
发布源代码 jar 包并不是一种罕见的做法。 - Noel Yap
不好意思,但这怎么算是一个答案呢? - alegria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接