2016-04-20 42 views
13

不知道这里有什么问题..我删除了本地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 
+0

你可能有一个依赖于对相同库的不同版本的传递依赖性。你可以通过https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html找到它们。如果您发现有不匹配的情况,您可以将您的依赖项的传递依赖关系排除在外,以便每个人都使用相同的lib版本。 –

+0

@HankD如何判断哪一个是传递性的?我添加了依赖项尝试,但似乎并没有包含在这里的传递项。 – displayname

+0

可传递的是以'\ -'开头的,所以我不认为就是这样。您可以尝试运行'mvn dependency:sources'来强制更新源代码(请参阅http://stackoverflow.com/questions/2059431/get-source-jars-from-maven-repository) –

回答

6

没有什么错IDEA,也不是你的依赖或本地Maven高速缓存,它的正确识别的不匹配。

以下是如何检查:

  • 问题公开课
  • 单击 “显示DIFF”
  • 选择 “忽略空格和空行”

diff screenshot

你可以清楚地看到(忽略JavaDoc和FQCN)类文件具有额外的检查i包含@NonNull带注释的参数。进口说lombok.NonNull,而documentation表明这种转变将发生。

我想最好的方法是忽略这个警告或者要求项目的维护者从lombok处理的源代码中构建sources.jar(如果可能的话)。我认为他们需要使用delomboking和this Maven plugin,但我自己从来没有建立过龙目岛代码。

+0

“您想要Lombok吗? ......” –

6

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

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

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

1)是指不会改变的代码(编译或不编译)。

2)模块是指代码可能会更改的项目部分(如果您单独工作)。

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

我从一个正在进行的项目(最初由另一个IDE创建)添加代码作为IntelliJ IDEA中的依赖项而出现错误。理论上这应该起作用,但它确实有效,但是就像我一样,我不能忽视我的开发环境顶部的一面大红旗!

为了解决这个问题:

模块 打开文件>项目结构>模块,并使用添加左上角绿色加号(不是一个向右)等项目,其中的代码可能更改。这使得它们对于IntelliJ来说是“活着的”,而不是一个尘土飞扬的老不变的库,如果改变了它,可能会导致警报横幅向你大喊。在这个阶段,只使用大面板占用大部分对话框来检查导入的jar,源代码等,以验证您想要的内容到达。

Adding a module

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

Adding a library

依赖 现在一切都应该是为你准备好返回到文件>项目结构>模块。这次进入大面板占据大部分对话框并切换到“依赖关系”选项卡。在这个阶段我的首选工作方式(特别是在项目大而复杂的时候)是按照我列出的模块工作,为每个模块添加库和模块依赖关系。这个时间为每个模块使用右侧的绿色加号来添加您需要的每个库或模块,这些应该从最后一步添加的模块中提供给您。

enter image description here

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

确保每个依赖你添加每个模块在依赖性选项卡中具有范围'编译'。

2.当您完成后,单击在项目结构底部的应用按钮对话框之前单击确定。它似乎应该是自动的,就像IntelliJ中的其他内容一样,但我不认为它是。通过在退出对话框之前不点击应用,我已经失去了对项目结构所做的更改。

0

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

对我来说,只是重新创建文件已经工作。

0

要是同样的问题 - 做了gradlew干净在命令行,然后进入Android的工作室,做了文件 - >的Invalidate缓存和重新启动,一切都恢复了健康..