如果使用 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 中解压缩文件,然后将提取的文件复制到目录的主要内容,如果未能解决你的问题,请参考以下文章