“ java.lang.Error:未解决的编译问题”的可能原因是什么?
附加信息:
从现有JAR顶部的版本复制一组更新的JAR文件并重新启动应用程序后,我已经看到了这一点。JAR是使用Maven构建过程构建的。
如果接口更改,我希望看到LinkageErrors或ClassNotFound错误。上面的错误提示存在一些较低级别的问题。
彻底的重建和重新部署解决了该问题。此错误是否表明JAR已损坏?
“ java.lang.Error:未解决的编译问题”的可能原因是什么?
附加信息:
从现有JAR顶部的版本复制一组更新的JAR文件并重新启动应用程序后,我已经看到了这一点。JAR是使用Maven构建过程构建的。
如果接口更改,我希望看到LinkageErrors或ClassNotFound错误。上面的错误提示存在一些较低级别的问题。
彻底的重建和重新部署解决了该问题。此错误是否表明JAR已损坏?
mvn compile
是不会导致错误,但是运行程序会导致错误。mvn clean compile
显示编译期间的错误(按预期方式)。
Answers:
尝试清理Eclipse项目
你只是尝试通过命令清理Maven
mvn clean
然后执行以下命令
mvn eclipse:clean eclipse:eclipse
并重建您的项目。
大部分由ThorbjørnRavn Andersen正确回答。
这个答案试图阐明剩下的问题:有错误的类文件怎么会在jar中结束?
每个版本(mvn&javac或eclipse)在遇到编译错误时都会以其特定方式发出信号,并且会拒绝从中创建Jar文件(或至少会明显提醒您)。默默地将带有错误的类文件放入jar的最可能原因是Maven和Eclipse的并发操作。
如果在运行mvn构建时已打开Eclipse,则应禁用“ 项目” >“自动构建”,直到mvn完成。
编辑:让我们尝试将谜语分为三个部分:
(1)“ java.lang.Error:未解决的编译问题”的含义是什么
ThorbjørnRavn Andersen对此进行了解释。毫无疑问,Eclipse在编译时发现了错误。
(2)如何将经过eclipse编译的类文件最终存储到由maven创建的jar文件中(假设未将maven配置为使用ecj进行编译)?
可以通过不进行清洗或不完全清洗来调用Maven。或者,自动Eclipse构建可以对文件系统中的更改做出反应(由maven完成)并重新编译类,然后maven继续将类文件收集到jar中(这就是我最初回答中的“并行操作”的意思))。
(3)为什么会有一个编译错误,但是
mvn clean
成功了?
再次有几种可能性:(a)编译器不同意源代码是否合法,或者(b)Eclipse使用诸如不完整的类路径,错误的Java合规性等损坏的设置进行编译。应该浮出水面。