我想使用jar
命令行工具将我的一个jar包提取到指定目录。
如果我理解正确的话,-C
选项应该可以实现,但是当我尝试时:
jar xvf myJar.jar -C ./directoryToExtractTo
我正在从我的jar工具获取使用信息,所以我做错了什么。
我想要的东西是否可以通过jar
实现,还是我需要手动移动我的jar并在那里调用?
jar xvf myJar.jar
jar使用zip压缩,因此您可以使用任何解压缩工具。
示例:
$ unzip myJar.jar -d ./directoryToExtractTo
unzip myJar.jar -d out-directory
将解压缩 myJar.jar 文件到 out-directory 目录中。 - Petr Újezdskýunzip
不在路径中,例如在某些distroless容器中,只有jar
可用... - WesternGun最好这样做。
导航到您需要的文件夹结构
使用命令
jar -xvf 'Path_to_ur_Jar_file'
cd /my/path && jar -xvf 'Path_to_ur_Jar_file'
- Ring在jar命令本身中没有这样的选项。请参阅文档:
-C dir 在处理以下inputfiles参数时,在执行jar命令期间暂时更改目录(cd dir)。 它的操作旨在类似于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目录,并向foo.jar添加所有classes目录中的文件(无需在jar文件中创建classes目录),然后在更改为bin目录以将xyz.class添加到foo.jar之前,返回原始目录。如果classes包含bar1和bar2文件,则使用jar tf foo.jar查看jar文件的内容如下:
META-INF/
META-INF/MANIFEST.MF
bar1
bar2
xyz.class
mkdir -p "/path/to/target-dir"
(cd "/path/to/target-dir" && exec jar -xf "/path/to/your/war-file.war")
这对我很有用。
我创建了一个文件夹,然后使用命令提示符中的CD选项进入该文件夹。
然后在那里执行了jar文件。
d:\LS\afterchange>jar xvf ..\mywar.war
set CURRENT_DIR=%cd%
mkdir ./directoryToExtractTo
cd ./directoryToExtractTo
jar xvf %CURRENT_DIR%\myJar.jar
cd %CURRENT_DIR%
可能有点过头了,但这是我想要的东西,所以我为它编写了一个 Bourne Shell 脚本(依赖于 sed
和 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
完整的脚本在此gist处。
截至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>
-C
只是用于添加文件。 - Paul Grime