【问题标题】:Java maven project - works when running from main class, but not from 'fat' jarJava maven 项目 - 从主类运行时有效,但不能从“胖”jar 运行
【发布时间】:2019-07-28 16:23:43
【问题描述】:

我正在尝试使用国际象棋 PGN 解析库来解析 PGN 文件并简单地创建一个文本文件。

  1. 库: https://github.com/bhlangonijr/chesslib

  2. 我的 Maven 项目: https://github.com/divukman/chess_pgn_text/tree/master/pgntotext


问题:

  1. 我可以在 IntelliJ 中运行它(只运行主类)并且它可以工作。

  2. 如果我创建一个胖 jar(mvn 包)并使用 java -jar target/pgn-to-text-1.0-SNAPSHOT.jar 运行它,我会收到以下错误:

  Exception in thread "main" com.github.bhlangonijr.chesslib.pgn.PgnException: Error parsing PGN[1, ]:
        at com.github.bhlangonijr.chesslib.pgn.PgnHolder.loadPgn(PgnHolder.java:343)
        at chess.Main.main(Main.java:18)
Caused by: java.lang.NullPointerException
        at com.github.bhlangonijr.chesslib.pgn.PgnHolder.loadPgn(PgnHolder.java:206)
        ... 1 more

知道为什么从 IDE 运行而不是从 jar 运行时它会起作用吗?为什么会因空指针异常而失败?好像没有正确读取文件!?!

【问题讨论】:

  • 你在解析任何文件吗?可能找不到该文件。
  • 似乎事件为空。这可能是因为地图事件不包含 p.value() (PgnHolder:173)
  • 大家好。谢谢大家的回答。使用的文件路径是硬编码的并且存在于驱动器上,这让我想知道。好像从 jar 运行时它没有正确读取它。我的推理与你在这里所说的一致。我将继续调查,使用不同的文件,将它们打包在 jar 中 :) 等...一旦解决,将更新帖子。

标签: java maven executable-jar fatjar


【解决方案1】:

看起来 PgnProperty p 在this 行为空,如果您的输入数据格式不正确here,则该行可能为空。可能您在 IntelliJ 和 fatjar 中使用了不同的文件,这导致了问题。

【讨论】:

  • 这里发生了一些非常奇怪的事情。似乎这与我创建 PGN 文件的方式有关。我使用 ChessBase 应用程序将自己的 DB 格式转换为 PGN。文件内容很好!但是,文件本身不是!?!我在网上随机获取了 PGN,从 jar 运行时应用程序运行良好!然后我从那个文件中取出内容并粘贴到我的 PGN 中,认为格式不正确......猜猜看,同样的错误,好的内容。但是,当我从 intelliJ 内部运行它时,它读起来很好。因此,文件 itslef 发生了一些事情,导致从 .jar 运行时无法读取它...
【解决方案2】:

我对哪些有效和哪些无效进行了一些比较。 我生成的文件采用 UTF-8 编码,从 jar 文件运行时显然不起作用。

当我编辑文件并将其保存为 ANSI 时,它工作正常!所以,我将这个谜团标记为完成,我需要看看设置什么,以便在从 jar 运行时读取 utf8 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2016-12-09
    • 2011-11-11
    • 2011-06-18
    相关资源
    最近更新 更多