【问题标题】:Extracting jar to specified directory提取jar到指定目录
【发布时间】:2013-03-27 16:37:43
【问题描述】:

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

如果我理解这一点,-C 选项应该可以解决问题,但是当我尝试时

jar xvf myJar.jar -C ./directoryToExtractTo

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

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

jar xvf myJar.jar

【问题讨论】:

  • 我认为-C 只是用于添加文件。
  • 也许,我认为它也是为了指定输出目录。

标签: java jar command


【解决方案1】:

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

例子:

$ unzip myJar.jar -d ./directoryToExtractTo

【讨论】:

  • unzip myJar.jar -d out-directory 用于 Xubuntu 12.04.1
  • 我过去在使用 zip 创建 jar 时遇到过问题(它不等同于使用 jar 命令),但我不能说解压缩。我的建议是您自担风险使用它,并倾向于使用 jar 命令。
  • gunzip 抱怨 jar 有多个条目
  • 在 rhel6 上没有任何问题...为什么 java 中的一切都如此半生不熟??
【解决方案2】:

最好这样做。

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

使用命令

jar -xvf  'Path_to_ur_Jar_file'

【讨论】:

  • 当然我可以这样做,我同意我可以这样做,我只是想知道我是否误解了 -C 选项,似乎是这样。
  • 也许这是通过“jar xf”指定目标位置的唯一方法。
  • 如果你想像我一样把它放在一行中:cd /my/path && jar -xvf 'Path_to_ur_Jar_file'
【解决方案3】:

jar 命令本身没有这样的选项。查看the documentation:

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

META-INF/MANIFEST.MF

bar1

bar2

xyz.class

【讨论】:

    【解决方案4】:

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

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

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

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

    【讨论】:

      【解决方案5】:

      这对我有用。

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

      然后从那里执行 jar。

      d:\LS\afterchange>jar xvf ..\mywar.war
      

      【讨论】:

        【解决方案6】:

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

        set CURRENT_DIR=%cd%
        mkdir ./directoryToExtractTo
        cd ./directoryToExtractTo
        jar xvf %CURRENT_DIR%\myJar.jar
        cd %CURRENT_DIR%
        

        【讨论】:

        • set CURRENT_DIR=%cd% mkdir -p directoryToExtractTo cd "directoryToExtractTo" jar xvf %CURRENT_DIR%\myJar.jar cd %CURRENT_DIR%
        【解决方案7】:

        截至 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>
        

        【讨论】:

          【解决方案8】:

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

          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

          【讨论】:

            猜你喜欢
            • 2016-01-03
            • 1970-01-01
            • 2020-08-19
            • 1970-01-01
            • 2021-02-04
            • 2013-08-21
            • 2010-11-07
            • 2015-12-19
            • 1970-01-01
            相关资源
            最近更新 更多