代码之家  ›  专栏  ›  技术社区  ›  abr

Java输出运行jar W/Project

  •  0
  • abr  · 技术社区  · 6 年前

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

    当我在Eclipse上调试时,工作正常。

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

    这是因为另一个项目的资源上有这个“空.xlsx”文件。我怎么解决这个问题?

    https://github.com/davidpelfree/sjxlsx/blob/master/src/main/java/com/incesoft/tools/excel/support/XLSXWriterSupport.java

    2 回复  |  直到 6 年前
        1
  •  1
  •   Joop Eggen    6 年前

    这是因为 资源 在类路径上是 文件 在文件系统上。 这里是用一个罐子(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());
    

    最好有一些删除临时文件的设置,例如在特定目录中创建它们,请参见 Files .

        2
  •  0
  •   Martín Zaragoza    6 年前

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

    编辑:

    如果要将软件导出为可运行的JAR文件,则JAR必须包含一个清单文件,该文件指定依赖项和主类。例子:

    Manifest-Version: 1.0
    Main-Class: com.example.Main
    Class-Path: lib1.jar lib2.jar
    

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

    java -jar myJar.jar
    

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

    java -cp '.:/libs/*.jar' com.example.Main
    

    您还可以使用依赖关系管理器工具(如Maven)并配置构建以创建“uberjar”: https://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html Uberjar在一个可运行的JAR文件中包含所有软件依赖项。

    希望这有帮助。