库源与类的字节码不匹配

时间:2016-04-20 19:36:21

标签: intellij-idea

不知道这里有什么问题。我从本地maven存储库中删除了所有文件,让它从头开始下载所有文件,但我无法摆脱这个错误:

enter image description here

为什么我会看到这个以及如何摆脱它?

[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

14 个答案:

答案 0 :(得分:15)

IDEA没有任何问题,也没有您的依赖关系或本地maven缓存,它正确识别不匹配。

以下是检查方法:

  • 有问题的公开课
  • 点击"显示差异"
  • 选择"忽略空格和空行"

diff screenshot

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

我想最好的做法是要么忽略这个警告,要么让项目的维护者从lombok处理的源代码中构建sources.jar,如果可能的话。我认为他们需要使用delomboking和this Maven plugin,但我自己从未构建过lombok代码。

答案 1 :(得分:8)

在解决这个问题时,我没有必要乱用Maven,只处理IntelliJ IDEA。

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

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

1)是指代码(已编译或未编译),不会改变。

2)模块是指项目的一部分(如果你是独自工作的话),代码可能会发生变化。

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

我从最初由另一个IDE创建的正在进行的项目的代码中添加了错误,作为IntelliJ IDEA中的依赖项。从理论上说这应该有效,而且确实如此,但是就像你一样,我无法忽略开发环境顶部的大红色横幅!

解决问题:

<强>模块 打开文件&gt;项目结构&gt;模块,并使用左上角的绿色加号(不是右边的那个)添加了代码可能会更改的其他项目。这使他们活着#39;对于IntelliJ,而不是一个尘土飞扬的旧的不可变图书馆,如果改变,可能会导致警报横幅向你大喊大叫。在这个阶段,只使用占据大部分对话框的大面板来检查导入的jar,源代码等,以验证你想要的内容。

Adding a module

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

Adding a library

<强>依赖关系 现在一切都准备就绪,您可以返回文件&gt;项目结构&gt;模块。这一次转到占据大部分对话框的大面板,并转到“依赖关系”。标签。我在这个阶段工作的首选方式(特别是在项目规模庞大且复杂的时候)是沿着列出的模块工作,在我去的时候为每个模块添加库和模块依赖关系。这次为每个模块使用右侧的绿色加号来添加您需要的每个库或模块,这些应该从最后一步添加的库中提供给您。

enter image description here

警告 完成此过程时应注意两个重要步骤

1。确保为每个模块添加的每个依赖具有范围&#39;编译&#39;在依赖项选项卡中。

2. 完成后,在单击“确定”之前,单击“项目结构”对话框底部的应用按钮。看起来它应该是自动的,就像IntelliJ中的其他许多东西一样,但我认为不是。在退出对话框之前,我没有单击“应用”,因此我对项目结构所做的更改丢失了。

答案 2 :(得分:8)

有同样的问题 - 从命令行执行 gradlew clean ,然后进入Android Studio并执行了文件 - &gt;使高速缓存无效并重新启动,一切都很好......

答案 3 :(得分:0)

我刚刚复制了文件的内容并将其删除。后来我刚创建了一个与旧文件同名的新文件,并将代码粘贴在其中。它对我有用。

对我来说,重新创建文件已经有效了。

答案 4 :(得分:0)

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

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

和/或

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

刚才我有这个问题,

什么帮助了我:

通过右键单击jar文件后在上下文菜单中选择“复制路径”,我找到了.ideaLibSources文件夹(当文件为在编辑器中打开并聚焦),然后从该文件夹中删除unwonted-sources.jar。 重新下载。

btw无效/重新启动没有帮助

答案 7 :(得分:0)

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

 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

答案 8 :(得分:0)

检查lib附带的多个来源

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

下的多个来源

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

答案 9 :(得分:0)

这就是我所做的:

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

为我工作。

答案 10 :(得分:0)

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

解决了该问题
  1. 将res / values / styles.xml文件中的AppTheme设置更改为:

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

  1. 接着是 gradlew clean

答案 11 :(得分:0)

以下情况适用于我的情况:

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

答案 12 :(得分:0)

在我的例子中,我的项目中有一个辅助 pom.xml 用于备份 (pom.xml.versionBackup),这导致了“库源与类的字节码不匹配”的噩梦。没有其他工作(清理库缓存,远程 .idea 文件夹,删除 ~/.m2 文件夹,删除 *.iml 文件,远程目标文件夹,...)

答案 13 :(得分:0)

通常会使缓存和“gradle clean build”无效,但这次由于某种原因没有。在尝试了所有答案后,我决定关闭项目窗口,删除项目文件夹中的 .idea 文件夹,然后使用 IntelliJ 再次打开该项目(一旦将其作为项目打开,它会重新创建 .idea 文件夹)。工作完美。