如果使用 jar,则从 jar 中解压缩文件,然后将提取的文件复制到目录

Posted

技术标签:

【中文标题】如果使用 jar,则从 jar 中解压缩文件,然后将提取的文件复制到目录【英文标题】:Unpack files from jar if jar is used, copy then extracted files to a directory 【发布时间】:2013-09-13 13:48:54 【问题描述】:

我有一个使用许多 Maven 依赖项的大型 web 应用程序。它们作为 JAR 文件包含在内,但我希望有机会直接在 Eclipse 中将其中的一些用作打开的项目。然后依赖项目与m2e链接。

需要从其中一些 JAR/项目中提取资源。

如何使用 Maven-dependency-plugin 做到这一点?如果工件以 JAR 形式包含,请将其解压缩,然后将文件复制到所需目录。如果工件作为项目包含,则它存在于硬盘上,并且可以直接访问和复制文件,无需解压。

【问题讨论】:

这个问题有点模糊:通常你会有一个 Webapp 项目,从 maven 角度包装“战争”,并在 Eclipse 中作为“动态 Web 项目”。通常这个项目不会包含 jars 但 maven 依赖项。如果您在 Eclipse 中有诸如打开项目之类的依赖项,m2e 将使用这些,否则将使用您的 lokal 存储库中的 jar。所以我无法理解您的问题中的“Maven 依赖项包含为 JAR 文件”。 我只需要在特定目录中有一些文件(CSS、JS)。我需要从 JAR 中提取和复制这些文件,或者在 Eclipse 打开的项目的情况下,只复制它们。我希望 m2e/maven 决定是否需要从 JAR 中提取(=如果项目作为 JAR 或作为 Eclipse 项目包含)。 【参考方案1】:

m2e-plugin既不能执行maven依赖插件也不能自己复制源码。

您可以使用 maven 依赖插件从 jar 中提取文件:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>yourSourceGroup</groupId>
                                <artifactId>yourSourceArtifact</artifactId>
                                <version>1.0.0</version>
                                <type>jar</type>
                                <includes>path/to/Files.whatsoever</includes>
                                <outputDirectory>$project.build.directory/your/target/folder</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

(您可能必须根据需要更改阶段或目标。)

您可以在 Eclipse 中对您的项目运行“右键单击->运行方式-> Maven 安装”,以将文件复制到您需要的位置。

作为所有这些的替代方案,您可以在您的 web 应用程序中使用资源过滤器在运行时直接从 jar 中获取资源,例如。 G。来自 spring 框架。

【讨论】:

以上是关于如果使用 jar,则从 jar 中解压缩文件,然后将提取的文件复制到目录的主要内容,如果未能解决你的问题,请参考以下文章

jar文件怎么运行

损坏的jar文件

pom配置多个jar包压缩成zip

WIN7下怎么修复JAR文件的打开方式?

jar解压后 如何把解压出来的文件夹 重新编译成jar ???

如何在一次操作中解压缩和 gzip 提取的文件?