我尝试将一个简单的 springboot helloworld 项目导入到 Eclipse 中。该项目将对其他项目、本地 jar 和 Web 存储库有大量依赖项,因此我在 build.gradle 中添加了一个 sourceSets 定义,以便能够在需要的地方调试和修改代码。
该项目可以使用“gradle bootRun”从命令行顺利构建和运行。
在 Eclipse 中,当我执行“导入.../Gradle /现有 Gradle 项目”时,生成的 Eclipse 包视图缺少“src/main/java”。
看起来任何引用 gradle.build 所在子目录的内容都会被 Eclipse 忽略。
Eclipse 选择第一个不是子目录的 sourceSets 引用,将其转换为“src”文件夹,并将 sourceSets 中的所有其余引用转换为源文件夹,并在引用名称后附加 -src。
我无法显示屏幕截图,但它在包资源管理器中看起来像这样:
MyProject
>src
[contents of FooProjectA]
>FooProjectB-src
>FooProjectC-src
etc etc
我尝试了无数不同的方法,但没有任何效果。
一旦我添加了我的sourceFileSets,一切都变糟了。
看起来像所有源集
这是我的(混淆的)build.gradle,因为它是 atm。
plugins {
id 'org.springframework.boot' version '3.3.0'
id 'java'
id 'eclipse'
}
apply plugin: 'io.spring.dependency-management'
group = 'com.myproject'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
compileJava.options.encoding = "ISO-8859-1"
compileJava.options.warnings = false
repositories {
mavenCentral()
}
sourceSets {
main {
java{
srcDirs = [
src/main/java',
'../FooProjectA/src',
'../FooProjectB/src',
'../FooProjectC/src',
[SNIP more of the same]
]
}
}
}
configurations {
all*.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
all*.exclude group: 'ch.qos.logback', module: 'logback-classic'
all*.exclude group: 'ch.qos.logback', module: 'logback-core'
}
dependencies {
implementation files (
'../jar_lib/libjar1.jar',
'../jar_lib/libjar2.jar',
'../jar_lib/libjar3.jar',
[SNIP more of the same]
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test')
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.apache.logging.log4j:log4j-api:2.20.0'
implementation 'org.apache.logging.log4j:log4j-core:2.20.0'
}
test {
useJUnitPlatform()
}
我有以下设置:
Eclipse 企业版 2024-09 -Spring Tools 4插件 -Buildship 3 插件
编辑
我尝试使用 IntelliJ 打开项目,它打开项目没有出现问题,并且我能够顺利运行和调试我的代码和依赖项目。
所以我的结论是我的项目 build.gradle 是正确的,但是生成 Eclipse 项目文件的 gradle eclipse 插件有错误,因此不可能在该项目中使用 Eclipse。同样,我尝试了 Visual Studio Code,虽然正确打开了项目,但编译失败,因此我无法在 VSC 中运行和调试我的代码:( :(
编辑
我的settings.gradle只有一行
rootProject.name = 'MyProject'
源路径
../FooProjectA/src
、../FooProjectB/src
...位于 Eclipse 项目之外,必须作为 链接文件夹包含在内。每个文件夹都分配有一个名称:
../FooProjectB/src => FooProjectB-src
../FooProjectC/src => FooProjectC-src
[...]
不幸的是,文件夹
../FooProjectA/src
被分配了名称src
:
../FooProjectA/src => src
此名称与现有物理文件位置冲突
src/main/java
。作为此错误的解决方法,您可以更改 ../FooProjectA/src
的指定名称。这必须在两个地方完成:
请将这些行添加到您的
build.gradle
:
eclipse {
project {
file {
whenMerged {
it.linkedResources.find { it.name = 'src' }.name = 'FooProjectA-src'
}
}
}
classpath {
file {
whenMerged {
it.entries.find { it.path == 'src' }.path = 'FooProjectA-src'
}
}
}
}
调用刷新 Gradle 项目后,您的源文件夹应该正确配置。