【问题标题】:Eclipse does not recognize gradle dependenciesEclipse 无法识别 gradle 依赖项
【发布时间】:2021-01-11 08:11:41
【问题描述】:

我对 Eclipse 比较陌生,我是 IntelliJ 人 :) 所以为了练习,我在 Eclipse 中做了一个虚拟的 Gradle 项目,它甚至无法识别自动插入的 JUnit 依赖项。

我正在使用的堆栈如下:

  • Gradle 6.6.1
  • Java 13
  • Eclipse 2019-09 R (4.13.0) --> 根据以下建议更新到 2020-09 (4.17.0)

我已经做过的事情:

来自herehere 的所有内容,即:

  1. 根据this 指南完成能够使用 Lombok 的先决条件(参见下面的代码)。

  2. 安装 Buildship Gradle。

  3. 在我的 build.gradle 中插入以下脚本:

    应用插件:“eclipse”

    然后运行

    gradlew cleanEclipse eclipse

  4. 在首选项中设置自动项目同步并使用该选项卡上的其他选项。

  5. 刷新依赖并右键单击。 ... 可能还有一些我记不太清的事情。

我的实际代码如下(大部分是自动生成的):

build.gradle:

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java Library project to get you started.
 * For more details take a look at the Java Libraries chapter in the Gradle
 * User Manual available at https://docs.gradle.org/6.3/userguide/java_library_plugin.html
 */

plugins {
    // Apply the java-library plugin to add support for Java Library
    id 'java-library'
    id "io.freefair.lombok" version "5.2.1"
}

repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}


dependencies {

 compileOnly 'org.projectlombok:lombok:1.18.12'
 annotationProcessor 'org.projectlombok:lombok:1.18.12'

 // only required if Lombok annotation are present in test code
 testCompileOnly 'org.projectlombok:lombok:1.18.12'
 testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
   

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:28.2-jre'
    
    implementation 'com.google.code.gson:gson:2.8.6'
    

    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
}

图书馆:

package gradleproject;

public class Library {
    public boolean someLibraryMethod() {
        return true;
    }
}

图书馆测试:

/*
 * This Java source file was generated by the Gradle 'init' task.
 */
package gradleproject;

import static org.junit.Assert.*;

import org.junit.Test;

public class LibraryTest {
    @Test
    public void testSomeLibraryMethod() {
        Library classUnderTest = new Library();
        assertTrue("someLibraryMethod should return 'true'", classUnderTest.someLibraryMethod());
    }
}

动物:

package gradleproject;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Animal {
    private String name;
    private int age;
}

JUnit 和 Lombok 依赖项在构建后都不会被识别。如果没有 lombok 依赖项,我的代码实际上会编译,甚至我的测试也会运行,但测试类本身(以及其中的代码)仍然带有下划线,并表示它无法解析依赖项。

如果我尝试其他一些库,构建会失败。

您有什么建议吗?

提前致谢。

PS:我已经更新到最新版本的 Eclipse 并重新创建了项目。遗憾的是,它并没有解决问题。

【问题讨论】:

  • 为什么要apply plugin: "eclipse",为什么要使用落后 4 个版本的 Eclipse,以及您是如何安装构建在所有 Java IDE 包中的 Buildship(也在您的复古 Eclipse 中)?
  • 您可以分享任何错误消息吗?
  • 通过用后续问题替换原始问题,Thomas 的回答不再有意义。这是一个遗憾,因为它非常详细地回答了在 Eclipse 中使用 Gradle 的常见误解。请恢复原始问题并接受答案以帮助他人。您可以将后续问题作为单独的问题提出。

标签: java eclipse gradle build.gradle java-13


【解决方案1】:

首先要注意的是,您使用的是一年前的 Eclipse 版本。 Eclipse 2020-09 刚刚发布。我强烈建议先升级到该版本以获得最新的改进。其次,无需安装 Buildship,因为它已包含在 Eclipse 中。

在 Gradle 方面,也不需要包含 Eclipse 插件。 Buildship 根本不使用 Eclipse 插件。相反,它使用 Gradle Tooling API。使用 Buildship 导入项目然后运行 ​​gradlew cleanEclipse eclipse 实际上违背了 Buildship 的目的并覆盖了由 Buildship 填充的项目设置。

查看提供的build.gradle,可以看到以下问题:

  1. junit:junit:4.13testCompiletestImplementation 范围内定义。仅使用 testImplementation

  2. Lombok 根本没有配置。在 Eclipse 中安装 Lombok 支持时,您仍然需要在 build.gradle 中定义一个依赖项:

     compileOnly 'org.projectlombok:lombok:1.18.12'
     annotationProcessor 'org.projectlombok:lombok:1.18.12'
    
     // only required if Lombok annotation are present in test code
     testCompileOnly 'org.projectlombok:lombok:1.18.12'
     testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
    

    在此处记录:Project Lombok

最后一个提示:在 Eclipse 中,打开 Console 视图并从视图菜单中选择 Gradle Operations。这样你就可以看到 Gradle 的输出了。如果您的构建脚本有问题,这可能会派上用场。

【讨论】:

  • 感谢您的回复。关于龙目岛部分:我在发布时也这样做了,我不知道我是如何没有将它包含在问题中的。将使用新信息更新我的问题,谢谢。我已经安装了最新的Eclipse,重新创建了项目,问题仍然没有解决。
【解决方案2】:

最终,我可以解决问题。问题是 Gradle 不知何故没有从外部 repo 下载外部依赖项文件夹中的引用项目。

我做过的事情:

  • 更新的 Gradle 版本(您可能已经在编辑后的问题中看到)
  • 转到 Window/Preferences 和 Gradle 包装器,而不是本地包装器
  • 打开项目同步(也在窗口/首选项)

随后,在下一个构建过程中,Gradle 下载了所有引用的 jar,一切正常。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2016-11-05
    • 1970-01-01
    • 2016-09-03
    • 2016-09-25
    • 1970-01-01
    • 2023-01-18
    • 2021-04-16
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多