Maven包打开jar包中的文件(作为*file*)
我需要打开maven jar包中的一个文件。它是我使用的框架的模型配置,库类的构造函数需要传递File类型的对象。我可以使用类加载器获得配置文件的路径,没有任何问题。但——不幸的是——文件无法读取jar中的文件。所以我得到java.io.FileNotFoundException。现在我正在寻找解决这个问题的方法。我的计划是解压缩模型配置文件并将其放在临时目录中。然而,在开始编码之前,我想知道是否有任何其他解决方案可以解决像我这样的问题Maven包打开jar包中的文件(作为*file*),file,maven-2,jar,maven,File,Maven 2,Jar,Maven,我需要打开maven jar包中的一个文件。它是我使用的框架的模型配置,库类的构造函数需要传递File类型的对象。我可以使用类加载器获得配置文件的路径,没有任何问题。但——不幸的是——文件无法读取jar中的文件。所以我得到java.io.FileNotFoundException。现在我正在寻找解决这个问题的方法。我的计划是解压缩模型配置文件并将其放在临时目录中。然而,在开始编码之前,我想知道是否有任何其他解决方案可以解决像我这样的问题 更新:我需要在运行时读取文件 如果您是从maven构建中执
更新:我需要在运行时读取文件 如果您是从maven构建中执行此操作,请使用
- (如果jar是项目的maven依赖项之一)
- 我认为您应该使用,一个接一个地遍历JAR条目,直到找到您需要的内容。然后只需
read()
找到的JarEntry的内容
,如果库需要一个文件,这将不会有帮助。那么,您可以从JAR中read()
并保存到一个临时文件
。即使在这种情况下,它也比将JAR解包到项目中更有效。感谢您的提示,它让我能够解决我的问题。我使用ClassLoader查找文件(jar文件中的路径),将其解压到临时目录中,并将其作为文件打开。您需要在构建时或运行时从jar文件中提取/读取该文件吗?下面有两个很好的答案,但它们都是在开发和运行时过程中的不同点完成任务的。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>the.groupId</includeGroupIds>
<includeArtifactIds>the.artifactId</includeArtifactIds>
<includes>**/path/to/your/resource.txt</includes>
<outputDirectory>where/do/you/want/it</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>the.groupid</groupId>
<artifactId>the.artifactid</artifactId>
<version>the.version</version>
<type>jar</type>
<outputDirectory>where/do/you/want/it</outputDirectory>
<includes>**/path/to/your/resource.txt</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>