如何优雅地在Maven项目中提取ZIP依赖中的JSON文件?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1720个文字,预计阅读时间需要7分钟。
在《伪原创》一文中,以下是对开头内容的简单
原文:
<dependency> <groupId>org.foo</groupId> <artifactId>myComponent</artifactId> <version>1.0</version> <type>zip</type> <scope>compile</scope> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
尽管Maven会将这个ZIP文件下载到本地仓库,但它并不会自动解压其内容并将其放置到项目的类路径(Classpath)中。因此,如果我们尝试使用 getClass().getResourceAsStream("/myFolder/myFile.json") 这样的标准Java方法来直接访问ZIP包内的 myFolder/myFile.json 文件,通常会得到 null。这是因为JVM的资源加载器默认无法直接在压缩的ZIP文件内部查找资源,它期望资源是文件系统上的独立文件或JAR包内的条目。
解决方案:利用 Maven Dependency Plugin 解压资源
要解决上述资源加载问题,我们需要在Maven构建生命周期中,显式地将ZIP依赖的内容解压到项目的输出目录(通常是 target/classes 及其子目录)。
本文共计1720个文字,预计阅读时间需要7分钟。
在《伪原创》一文中,以下是对开头内容的简单
原文:
<dependency> <groupId>org.foo</groupId> <artifactId>myComponent</artifactId> <version>1.0</version> <type>zip</type> <scope>compile</scope> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
尽管Maven会将这个ZIP文件下载到本地仓库,但它并不会自动解压其内容并将其放置到项目的类路径(Classpath)中。因此,如果我们尝试使用 getClass().getResourceAsStream("/myFolder/myFile.json") 这样的标准Java方法来直接访问ZIP包内的 myFolder/myFile.json 文件,通常会得到 null。这是因为JVM的资源加载器默认无法直接在压缩的ZIP文件内部查找资源,它期望资源是文件系统上的独立文件或JAR包内的条目。
解决方案:利用 Maven Dependency Plugin 解压资源
要解决上述资源加载问题,我们需要在Maven构建生命周期中,显式地将ZIP依赖的内容解压到项目的输出目录(通常是 target/classes 及其子目录)。

