Eclipse 无法识别 gradle 个依赖项
Eclipse does not recognize gradle dependencies
我是 Eclipse 的新手,我是 IntelliJ 的人:)所以为了练习,我在 Eclipse 中做了一个虚拟的 Gradle 项目,它甚至没有识别自动插入的 JUnit 依赖项。
我使用的堆栈如下:
- Gradle6.6.1
- Java 13
- Eclipse 2019-09 R (4.13.0) --> 已根据以下建议更新至 2020-09 (4.17.0)。
我已经做过的事情:
来自 and here 的所有内容,即:
根据 this 指南完成能够使用 Lombok 的先决条件(参见下面的代码)。
正在安装 Buildship Gradle。
在我的 build.gradle 中插入以下脚本:
应用插件:“eclipse”
之后运行
gradlew cleanEclipse 日食
在首选项中设置自动项目同步并使用该选项卡上的其他选项。
正在刷新依赖项并单击鼠标右键。
...可能还有其他一些我想不起来的事情。
我的实际代码如下(大部分是自动生成的):
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 依赖,我的代码实际上编译,甚至我的测试运行,但测试 class 本身(和里面的代码)仍然带有下划线并表示它无法解析依赖关系。
如果我尝试其他一些库,构建会失败。
你有什么建议吗?
提前致谢。
PS: 我已经更新到最新版本的 Eclipse 并重新创建了项目。遗憾的是,它并没有解决问题。
首先要注意的是您使用的是一年前的 Eclipse 版本。 Eclipse 2020-09
刚刚发布。我强烈建议先升级到那个以获得最新的改进。其次,无需安装 Buildship,因为它已包含在开箱即用的 Eclipse 中。
在 Gradle 方面,也不需要包含 Eclipse 插件。 Buildship 根本不使用 Eclipse 插件。相反,它使用 Gradle 工具 API。使用 Buildship 导入项目然后 运行 gradlew cleanEclipse eclipse
实际上违背了 Buildship 的目的并覆盖了 Buildship 填充的项目设置。
查看提供的 build.gradle
,我可以看到以下问题:
junit:junit:4.13
在 testCompile
和 testImplementation
范围内定义。仅使用 testImplementation
。
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 输出。如果您的构建脚本有问题,这可能会派上用场。
最终,我解决了这个问题。问题是 Gradle 不知何故没有从外部 repo 下载外部依赖文件夹中的引用项目。
我做过的事情:
- 更新了 Gradle 版本(您可能已经在编辑过的问题中看到)
- 转到 Window/Preferences 和 Gradle 包装器而不是本地包装器
- 打开项目同步(也在 Window/Preferences)
随后,在下一个构建过程中,Gradle 下载了所有引用的 jar,一切正常。
感谢您的帮助。
我是 Eclipse 的新手,我是 IntelliJ 的人:)所以为了练习,我在 Eclipse 中做了一个虚拟的 Gradle 项目,它甚至没有识别自动插入的 JUnit 依赖项。
我使用的堆栈如下:
- Gradle6.6.1
- Java 13
- Eclipse 2019-09 R (4.13.0) --> 已根据以下建议更新至 2020-09 (4.17.0)。
我已经做过的事情:
来自
根据 this 指南完成能够使用 Lombok 的先决条件(参见下面的代码)。
正在安装 Buildship Gradle。
在我的 build.gradle 中插入以下脚本:
应用插件:“eclipse”
之后运行
gradlew cleanEclipse 日食
在首选项中设置自动项目同步并使用该选项卡上的其他选项。
正在刷新依赖项并单击鼠标右键。 ...可能还有其他一些我想不起来的事情。
我的实际代码如下(大部分是自动生成的):
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 依赖,我的代码实际上编译,甚至我的测试运行,但测试 class 本身(和里面的代码)仍然带有下划线并表示它无法解析依赖关系。
如果我尝试其他一些库,构建会失败。
你有什么建议吗?
提前致谢。
PS: 我已经更新到最新版本的 Eclipse 并重新创建了项目。遗憾的是,它并没有解决问题。
首先要注意的是您使用的是一年前的 Eclipse 版本。 Eclipse 2020-09
刚刚发布。我强烈建议先升级到那个以获得最新的改进。其次,无需安装 Buildship,因为它已包含在开箱即用的 Eclipse 中。
在 Gradle 方面,也不需要包含 Eclipse 插件。 Buildship 根本不使用 Eclipse 插件。相反,它使用 Gradle 工具 API。使用 Buildship 导入项目然后 运行 gradlew cleanEclipse eclipse
实际上违背了 Buildship 的目的并覆盖了 Buildship 填充的项目设置。
查看提供的 build.gradle
,我可以看到以下问题:
junit:junit:4.13
在testCompile
和testImplementation
范围内定义。仅使用testImplementation
。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 输出。如果您的构建脚本有问题,这可能会派上用场。
最终,我解决了这个问题。问题是 Gradle 不知何故没有从外部 repo 下载外部依赖文件夹中的引用项目。
我做过的事情:
- 更新了 Gradle 版本(您可能已经在编辑过的问题中看到)
- 转到 Window/Preferences 和 Gradle 包装器而不是本地包装器
- 打开项目同步(也在 Window/Preferences)
随后,在下一个构建过程中,Gradle 下载了所有引用的 jar,一切正常。
感谢您的帮助。