Java导出运行jar w/project

Java导出运行jar w/project,java,eclipse,export-to-excel,xlsx,Java,Eclipse,Export To Excel,Xlsx,因此,我将git回购添加到我的项目()。然后,我右键单击repo并将其导入到包资源管理器中。然后我转到项目->构建路径,以确保它位于“构建路径上的必需项目”上 当我在Eclipse上调试时,一切正常 我现在正试图导出为一个运行的jar,当我在Eclipse之外执行它时,不知何故它给出了一个错误(empty.xlsx not found)。也就是说,因为在xlsxritersupport中,open方法获取这个空的.xlsx文件。在调试时,它按预期工作,但在转换为运行的jar时,它会给我这个错误

因此,我将git回购添加到我的项目()。然后,我右键单击repo并将其导入到包资源管理器中。然后我转到项目->构建路径,以确保它位于“构建路径上的必需项目”上

当我在Eclipse上调试时,一切正常

我现在正试图导出为一个运行的jar,当我在Eclipse之外执行它时,不知何故它给出了一个错误(empty.xlsx not found)。也就是说,因为在xlsxritersupport中,open方法获取这个空的.xlsx文件。在调试时,它按预期工作,但在转换为运行的jar时,它会给我这个错误

这是因为此“empty.xlsx”文件位于另一个项目的资源上。我怎样才能解决这个问题


您可能已经将Eclipse项目构建路径配置为使用绝对库引用。当您尝试运行runnable jar时,jvm无法找到所需的依赖项

编辑: 如果希望将软件导出为可运行的jar文件,那么jar必须包含一个清单文件,其中指定依赖项和主类。例如:

Manifest-Version: 1.0
Main-Class: com.example.Main
Class-Path: lib1.jar lib2.jar
(假设您的主类是com.example.main) 要运行runnable jar文件,请将lib1和lib2放在与runnable jar相同的目录中,然后运行:

java -jar myJar.jar
否则,您可以编译主类并像这样运行它(假设lib1和lib2被复制到主类根路径上的lib/dir中):

您还可以使用依赖项管理器工具(如maven)并将构建配置为创建“uberJar”: UberJAR在一个沉重的可运行jar文件中包含所有软件依赖项

希望这有帮助。

这是因为类路径上的资源不是文件系统上的文件。 在这里,它被打包在一个jar(zip格式)中

错误代码:

if (getClass().getResource("/empty.xlsx") == null) {
        throw new IllegalStateException("no empty.xlsx found in classpath");
    }
    workbook = new SimpleXLSXWorkbook(new File(getClass().getResource("/empty.xlsx").getFile()));
由于SimpleXLSXWorkbook只有一个文件构造函数(AFAIK),因此需要创建一个临时文件

Path tempPath = Files.createTempFile("sjxlsx-", ".xlsx");
Files.copy(getClass().getResourceAsStream("/empty.xlsx"), tempPath);
workbook = new SimpleXLSXWorkbook(tempPath.toFile());

最好有一些删除临时文件的规定,例如在特定目录中创建临时文件,请参阅。

我会在早上检查,谢谢提醒!使用
-jar
时,
-cp
选项不起作用。使用
-jar
时,类路径必须由jar清单定义。@markrotVeel这是真的-cp选项不适用于-jar。很抱歉,我曾尝试过类似的解决方案,但这种方法也很有效,谢谢!
Path tempPath = Files.createTempFile("sjxlsx-", ".xlsx");
Files.copy(getClass().getResourceAsStream("/empty.xlsx"), tempPath);
workbook = new SimpleXLSXWorkbook(tempPath.toFile());