在可执行的 .jar 文件中包含 excel

Posted

技术标签:

【中文标题】在可执行的 .jar 文件中包含 excel【英文标题】:Include excel in executable .jar file 【发布时间】:2015-03-30 05:42:14 【问题描述】:

我必须从 excel 文件中读取数据并在我的应用程序中显示数据。 我想将我的 excel 文件(数据文件)与可执行 jar 一起打包。我在我的主项目文件夹中创建了一个源文件夹 并将其命名为“res”。在“res”内,我有 2 个子文件夹(普通文件夹),分别称为“images”和“data”。在我拥有的数据文件夹内 放置excel文件。

我的项目结构

构建路径

导出为 JAR

问题:

当我从 Eclipse 运行该应用程序时,它可以完美运行,但是当我将其导出为 jar 时,该应用程序无法运行。它能够找到图像但无法找到 excel 文件。

换句话说,当我从 Eclipse 内部运行应用程序(右键单击 -> 运行方式 -> Java 应用程序)时,它运行良好。但是当启动导出的 JAR 文件(“Tool.jar”)时,它无法读取 excel 数据。

读取 Excel 的代码

URL excelResources = getClass().getResource("/excel/data.xls");
File excel = new File(excelResources.toURI());
FileInputStream fis = new FileInputStream(excel);

【问题讨论】:

getClass().getResource("/res/data/MyAwesome.xls") 会给你一个URL 到你的 Excel 文件; getClass().getResourceAsStream("/res/data/MyAwesome.xls") 将向您的 Excel 文件返回一个 InputStream... 您能否添加有关您访问图像和 Excel 的方式的详细信息?如果你有任何错误 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。 ***.com/a/25636097/2587435 @peeskillet :- 感谢您将我指向此链接。我尝试了它们,但未能解决我的问题。问题出在导出的 .jar 文件上。它能够找到图像,但无法加载 excel 文件。请帮忙。 【参考方案1】:

这...

URL excelResources = getClass().getResource("/excel/data.xls");
File excel = new File(excelResources.toURI());
FileInputStream fis = new FileInputStream(excel);

不是嵌入式资源的工作方式。您不能再像访问文件系统上的文件一样访问 excel 文件,因为它不是,它嵌入在 Jar 文件中。

如果您需要 InputStream,请使用 Class#getResourceAsStream

try (InputStream is = getClass().getResourceAsStream("/excel/data.xls")) 
    //...
 catch (IOException exp) 
    exp.printStackTrace();

【讨论】:

【参考方案2】:

使用maven可以通过插件来完成:

<build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>your.class.Name</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <resources>
                        <resource>
                            <directory>$basedir/src/main/res/data</directory>
                            <filtering>false</filtering>
                        </resource>
                    </resources>
                </configuration>

                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

【讨论】:

以上是关于在可执行的 .jar 文件中包含 excel的主要内容,如果未能解决你的问题,请参考以下文章

使用 Maven 在可执行 JAR 中包含签名库

在可执行文件中包含引用

无法在可执行 jar 中运行的 java 项目中找到文件

在可执行 jar 中访问 derby 数据库

在可分发的 Python 模块中包含 pdftk

通过 maven-assembly-plugin 打包在 jar 中包含 spring xml