为什么NetBeans加载Java库的顺序有时会导致错误?以及我如何避免它



基本背景数据:Windows 7,Netbeans 8.0.2,LWJGL 2.9.3,Slick Util。代码的其余部分是我自己的。

因此,定期,我有一个我认为是一个错误,导致我的程序在IDE内运行,但是当我使用"清洁和构建"时会失败。在项目上。

今天,当它再次发生时,我决定到达底部。因此,取出整个项目文件夹的副本,它可以正常工作且其他相同,并且一次替换1个文件,然后对其进行测试,我能够将其缩小到/nbproject/project.properties文件。

可以更换其他所有文件,并且问题持续存在。仅替换此文件,问题消失了。因此,我加载了两个文件并并排比较它们(使用Netbeans" diff diff diff与" ..."功能(,并将其范围缩小到以下几行:

javac.classpath=
${libs.LWJGL-2.9.3.classpath}:
${libs.0-Slick_Util.classpath}:
${libs.0-Loaders_v03.classpath}:
${libs.0-Text2D_v03.classpath}:
${libs.0-Foundation_v04.classpath}:
${libs.0-Abstracts_v04.classpath}

现在,此代码似乎正在告诉编译器应加载库的顺序(我可能是错误的(。

考虑到这一点,我决定对其进行测试。我将此块从工作文件中复制到非工作文件,而且效果很好。工作代码btw是这样:

javac.classpath=
${libs.LWJGL-2.9.3.classpath}:
${libs.0-Slick_Util.classpath}:
${libs.0-Foundation_v04.classpath}:
${libs.0-Abstracts_v04.classpath}:
${libs.0-Loaders_v03.classpath}:
${libs.0-Text2D_v03.classpath}

您可能会注意到的唯一区别是订单。继续测试,我进入了非工作项目的库属性页面,并简单地重新订购了库以匹配工作列表。问题消失了!如果我简单地将基础移动并将库中的图书馆摘下来,则问题又回来了!

我必须尝试过十几个不同的订单组合,并且大约有2/3的失败,而有效的1/3。所有涉及基础和/或摘要都接近顶部的人。

为什么会发生这种情况?我怎么知道需要加载我的库以避免错误?

错误是这样:

F:Dropbox2-Documents4-Java ProgrammingLibrary-LoadingScreen_v04-CopysrcA_LibraryTest_LoadingScreen.java:94: error: cannot find symbol
    Lib_Foundation                  .setConfigLocation(configLocation);
  symbol:   method setConfigLocation(String)
  location: class Lib_Foundation

任何可以帮助我避免此问题的信息将不胜感激。

看起来" Loaders_v03"或" Text2D_V03"包含其自己的基础版本,包括不兼容的Lib_foundation类。按顺序搜索类路径,因此您当前的解决方案(重新安排javac.classpath(会始终工作,假设Netbeans下次您对项目进行任何更改时不会搞砸它。

这是否会破坏装载机和Text2D取决于基础效果如何遵循面向对象的设计:公共类及其公共成员绝不应该在连续的版本中更改或删除。(这就是为什么为Java 1.1编写的20年历史代码仍将在Java 8中编译。(

最新更新