库源与类的字节码不匹配


71

不知道这是怎么回事..我从本地maven存储库中删除了所有文件,并让它从头开始下载所有内容,但我无法摆脱此错误:

在此处输入图片说明

为什么我会看到它,如何摆脱它?


[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ wordvectors ---
[INFO] masterthesis.code:wordvectors:jar:1.0-SNAPSHOT
[INFO] +- org.apache.spark:spark-core_2.10:jar:1.6.0:compile
[INFO] |  \- org.apache.hadoop:hadoop-client:jar:2.2.0:compile
[INFO] |     \- org.apache.hadoop:hadoop-common:jar:2.2.0:compile
[INFO] |        \- commons-configuration:commons-configuration:jar:1.6:compile
[INFO] |           \- (commons-collections:commons-collections:jar:3.2.1:compile - omitted for conflict with 20040616)
[INFO] \- org.deeplearning4j:deeplearning4j-ui:jar:0.4-rc3.8:compile
[INFO]    \- org.deeplearning4j:deeplearning4j-nlp:jar:0.4-rc3.8:compile
[INFO]       \- it.unimi.dsi:dsiutils:jar:2.2.2:compile
[INFO]          \- commons-collections:commons-collections:jar:20040616:compile

您可能对同一库的不同版本具有依赖关系,并且具有传递依赖关系。您可以按照示例在maven.apache.org/plugins/maven-dependency-plugin/examples/…中发现它们。如果发现不匹配,则可以告诉您的依赖项的传递依赖项被排除在外,以便每个人都使用相同的lib版本。
Hank D

@HankD我怎么知道其中哪一个是可传递的?我添加了依赖尝试,但似乎这里没有包含可传递的尝试。
Stefan Falk 2016年

可传递的是开头的,\-所以我认为不是这样。你可以尝试运行mvn dependency:sources,迫使源代码的更新(见stackoverflow.com/questions/2059431/...
汉克d

Answers:


31

IDEA没错,您的依赖项或本地Maven缓存也没有错,它可以正确识别不匹配。

检查方法如下:

  • 公开课
  • 点击“显示差异”
  • 选择“忽略空格和空行”

diff屏幕截图

您可以清楚地看到(忽略JavaDoc和FQCN)该类文件包含对带@NonNull注释的参数的额外检查。导入内容为lombok.NonNull文档显示此转换将发生。

我猜最好的做法是要么忽略此警告,要么请项目的维护人员从lombok处理过的源代码中构建sources.jar。我认为他们需要使用delomboking和此Maven插件,但不要自己构建lombok代码。


1
“您想要龙目​​岛吗?……”
Walter Tross

如何禁用此警告的显示?它从编辑器窗口中窃取了焦点,我被迫使用鼠标将焦点移回。真的很烦,因为它对我来说发生了很多事情……而且永远都不可行。
谢尔盖·别洛佐洛夫

1
@SergiyBelozorov我认为没有内置的方法,但是有可能编写一个通过禁用扩展点来删除功能的插件(如果可能的话)。参见github.com/JetBrains/intellij-community/…。我建议你在问一个问题intellij-support.jetbrains.com/hc/en-us/community/topics/...或打开在一个错误youtrack.jetbrains.com/issues/IDEA偷焦点。
TWiStErRob

35

遇到了同样的问题-从命令行清理gradlew,然后进入Android Studio并执行了 File-> Invalidate Caches and Restart ,一切都恢复了。


我在IntelliJ和Maven项目中遇到了同样的问题。同样对我也有用。谢谢
redochka '18 -10-9

1
我不使用gradle。因此,仅使缓存无效就可以解决此问题。
读书者

在Intellij IDEA中使用gradle项目也遇到了相同的问题。这对我有用。
Shubhzgang

12

在解决此问题时,我无需弄乱Maven,而只处理IntelliJ IDEA。

对我来说,这个问题源于IntelliJ IDEA中三个概念之间的混淆:模块,库和依赖项。我有不同的项目,使用了不同的程序包,其中一些程序以不一致的方式相互引用。关于如何引用下载的第三方程序包,我也前后不一致。

一旦我区分了模块,库和依赖项的三个概念,这很容易。我在脑海中如何澄清它们:

1)引用不变的代码(无论是否编译)。

2)模块是指项目的某些部分(如果您是单独工作,则是您自己的部分),这些部分的代码可能会更改。

3)依赖关系(用于此对话)是特定模块将使用的库或其他模块。

我由于将正在进行的项目的代码添加为IntelliJ IDEA中的依赖项而出错,该代码最初是由另一个IDE创建的。从理论上讲,这应该行得通,而且行得通,但是像您一样,我不能忽略开发环境顶部的红色旗帜!

解决问题:

模块 打开“文件”>“项目结构”>“模块”,并使用左上方的绿色加号(而不是右侧的加号)添加了代码可能会更改的其他项目。这使它们“活跃”到IntelliJ,而不是尘土飞扬的旧式不变库,如果更改了库,则该库可能导致警报标语向您喊叫。在此阶段,仅使用占据大部分对话框的大面板来检查导入的jar,源代码等,以验证所需的内容。

添加模块

打开文件>项目结构>库,然后再次使用左上角的绿色加号添加包含不会更改的代码的文件夹。右边的另一个绿色加号允许您将内部文件夹添加到已添加的库中,但是IntelliJ擅长在不同的项目结构中查找这些内部文件夹,因此请考虑从头开始添加新的库,而不是添加您认为的特定文件夹丢失并导致存在多个副本,另一件事导致IntelliJ混乱(可以理解)。

添加图书馆

依赖关系 现在一切准备就绪,可以返回到文件>项目结构>模块。这次转到占据大部分对话框的大面板,然后切换到“ Dependencies”选项卡。在此阶段(尤其是在项目较大且复杂的情况下),我首选的工作方式是按照列出的模块进行操作,并随即为每个模块添加库和模块依赖项。这次,对于每个模块,请使用右侧的绿色加号添加所需的每个库或模块,这些库或模块应从上一步中添加的库或模块中提供。

在此处输入图片说明

警告两个重要的步骤,你应该小心整理过程时:

1.制作确保每个依赖你增加了每个模块具有范围“编译”的依赖关系选项卡。

2.完成后,单击“确定”之前,单击“项目结构”对话框底部的“应用”按钮。似乎它应该是自动的,就像IntelliJ中的其他功能一样,但我认为不是。通过退出对话框之前未单击“应用”,我丢失了对项目结构所做的更改。


1

我遇到了这个问题,据我所知,我知道两种解决方案可以解决此问题:

  1. 单击您的IntellIj窗口顶部的“构建”,然后单击“构建项目”

和/或

  1. 在右侧,单击“七个项目”(垂直写成小写),然后单击“清理”

除了这里的问题特别针对Lombok,Lombok会基于注释执行字节码修改,因此源代码永远不会与Lombok的类文件对齐。
戴夫牛顿

@DaveNewton您能找到解决方案吗?我也面临同样的问题,这与龙目岛有关
Abhishek Raj Raj

1

刚才我有这个问题

是什么帮助了我:

我已经找到了.ideaLibSources文件夹,通过右键单击jar文件后在上下文菜单中选择“复制路径” (当在编辑器中打开文件并且焦点对准时,您可以在想法的上部找到jar-file链接),然后从该文件夹中删除了unwonted-sources.jar。重新下载。

顺便说一句无效/重新启动没有帮助


1

检查lib附带的多个源

这可能是由于库中定义了多个来源。检查并删除多个来源File > Project Structure > Libraries > lib with issue > Sources

例如,文件>项目结构>库> Maven:com.rohit:example:1.0.0>源->删除多个源


0

就我而言,有助于后续步骤:

  1. 从本地存储库中删除库
  2. 重建项目

0

这是由依赖于.m2 / repository的软件包的旧编译版本引起的。

 All you need to do is
  -> Find the package in m2 folder and delete it
  -> Rebuild the required package or re-download from the repository
  -> Reimport all packages in the project

0

这是我所做的:

  1. 使缓存无效并重新启动。
  2. 重建项目(“构建”->“重建”)。
  3. 使用构建系统进行重建(例如mvn全新安装)。

为我工作。


0

将较旧的应用程序迁移到Androidx之后,我遇到了这个问题。该问题原来是使用与Androidx不兼容的AppTheme样式的ActionBar的问题。调试器未选择此选项。我通过解决此问题

  1. 将res / values / styles.xml文件中的AppTheme设置更改为:

<style name="AppBaseTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> 
</style>

  1. 其次是gradlew clean

0

以下是我的案例:

  1. 在项目结构中找到依赖项。
  2. 右键单击依赖项和“打开库”设置。
  3. 右键单击并删除依赖项。
  4. 再次重新导入所有依赖项。

-1

我只是复制了文件的内容并删除了它。后来我刚刚创建了一个与旧文件同名的新文件,并将代码粘贴到了其中。它为我工作。

对我来说,重新创建文件就可以了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.