79

我想使用jar命令行实用程序将我的一个 jar 提取到指定目录。

如果我理解这个正确-C的选择应该是诀窍但是当我尝试

jar xvf myJar.jar -C ./directoryToExtractTo

我从我的 jar 实用程序中获取使用信息,所以我做错了。

是我想要实现的事情jar还是我需要手动移动我的 jar 并在那里调用

jar xvf myJar.jar
4

8 回答 8

82

jars 使用 zip 压缩,因此您可以使用任何解压缩实用程序。

例子:

$ unzip myJar.jar -d ./directoryToExtractTo

于 2013-04-05T11:06:33.613 回答
71

最好这样做。

导航到您需要的文件夹结构

使用命令

jar -xvf  'Path_to_ur_Jar_file'
于 2013-04-05T10:05:44.633 回答
13

jar 命令本身没有这样的选项。查看文档

-C dir 在执行 jar 命令期间临时更改目录 (cd dir),同时处理以下 inputfiles 参数。其操作旨在类似于 UNIX tar 实用程序的 -C 选项。例如: jar uf foo.jar -C classes bar.class 更改为 classes 目录并将 bar.class 从该目录添加到 foo.jar。以下命令 jar uf foo.jar -C classes 。-C bin xyz.class 更改到classes目录并将classes目录下的所有文件添加到foo.jar中(没有在jar文件中创建classes目录),然后更改回原来的目录,然后再更改到bin目录添加xyz.class 到 foo.jar。如果类包含文件 bar1 和 bar2,那么使用 jar tf foo.jar 的 jar 文件包含以下内容: META-INF/

元信息/清单.MF

酒吧1

酒吧2

xyz类

于 2015-03-24T18:56:10.533 回答
8

如果您不想更改当前工作目录,在这样的子外壳中运行提取命令可能会更容易。

mkdir -p "/path/to/target-dir"
(cd "/path/to/target-dir" && exec jar -xf "/path/to/your/war-file.war")

然后,您可以从任何工作目录执行此脚本。

[感谢David Schmitt的 subshel​​l 技巧]

于 2018-04-25T03:31:30.963 回答
2

这对我有用。

我创建了一个文件夹,然后使用命令提示符中的 CD 选项更改为该文件夹。

然后从那里执行 jar。

d:\LS\afterchange>jar xvf ..\mywar.war
于 2016-04-12T05:05:20.710 回答
2

这就是我最终在 .bat 文件中使用的内容。当然只有 Windows。

set CURRENT_DIR=%cd%
mkdir ./directoryToExtractTo
cd ./directoryToExtractTo
jar xvf %CURRENT_DIR%\myJar.jar
cd %CURRENT_DIR%
于 2018-04-06T21:13:07.420 回答
0

截至 2020 年 10 月的当前工作版本,已更新为使用 maven-antrun-plugin 3.0.0。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>prepare</id>
                    <phase>package</phase>
                    <configuration>
                        <target>
                            <unzip src="target/shaded-jar/shade-test.jar"
                                   dest="target/unpacked-shade/"/>
                        </target>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
于 2020-10-31T22:35:30.313 回答
0

可能有点矫枉过正,但这是我想要的,所以我为它写了一个 Bourne Shell 脚本(依赖于sedand grep):

Usage: unjar FILE [DEST]

- DEST must not already exist (won't overwrite existing contents);
  path to DEST will be created.

- If DEST is not provided, defaults to a subdirectory in the current
  working directory that will be named after FILE without the extension.
  Ex: unjar foo.jar  # foo.jar extracted to ./foo

- If DEST is provided, the path will be created and the jar will
  be extracted into it.
  Ex: unjar foo.jar /a/b/c  # foo.jar extracted into /a/b/c

完整的脚本在这个要点上

于 2021-07-16T04:48:35.040 回答