Gradle SourceSet IntelliJ 与 Eclipse
Gradle SourceSet IntelliJ vs. Eclipse
当我将最初使用 Eclipse 构建的 gradle 项目导入 IntelliJ[=84 时,我指出了一个问题=].
事实上,该项目是一个 gradle-project,但是当我将它导入 IntelliJ 时,IDE 告诉我它删除了(一些)重复的内容根。
我得到一个气球 - 告诉我:
Duplicate content roots deleted
事件日志中的消息是:
hh:mm[=22:58] Duplicate content roots detected
Path [/Users/.../someProject/someModule] of module [someModuleName] was removed from modules [someModuleName.someSourceSetName]
Also 1 more path was deduplicatetd. See idea log for details
一般来说,它是一个 gradle-project,但我无法在 IntelliJ 中 运行 它。
它在 命令行 (./gradlew build) 上使用 gradle-Wrapper 构建,但我 想使用 IntelliJ 进行构建,以使用(重新编译+重新加载)和 IDE.
的其他功能来提高使用率
我有以下模块:
A(A 是我尝试构建的模块)
B(B 是模块,我想在其中重用模块 A 的 sourceSets 'main' 和 'testutils')
模块 A - 包含 3 个源集(=main、test、testutils):
src/main/java
src/test/java
src/testutils/java
模块 A 具有 testutils(消耗 'main')、测试(消耗 'main' & 'testutils')、main(生产java-模块的 src)
和模块B,其中模块A的sourceSet testutils
在main
src中是必需的,并且tests
;
模块 B - 使用 sourceSet 'A/src/main/java' 和 'A/src/testutils/java':
所以我的 gradle 文件是(稍微缩短):
A/build.gradle:
apply plugin: 'maven'
sourceSets {
test.java.srcDirs +='src/testutils/java'
testutils
}
dependencies {
api project('someOtherProjectA')
...
testImplementation project('someOtherProjectZZ')
testutilsImplementation sourceSets.test.compileClasspath
}
task testutilsJar(type: Jar) {
from sourceSets.testutils.output
appendix 'testutils'
}
configurations {
testutils
}
artifacts {
testutils testutilsJar
}
uploadTestutils {
repositories {
mavenDeployer {
configuration = configurations.testutils
repository(url: mavenPublicRepository) {
authentication(userName: repoUsername, password: repoPassword)
}
}
}
}
publish.dependsOn uploadTestutils
B/build.gradlew:
dependencies {
api project('someOtherProjectB')
api "someOtherDependency"
...
testImplementation project('someOtherProjectC')
testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
...
}
我的开发系统设置:
JDK: 11.0.4
Gradle-Wrapper with Version: gradle-5.5.1
IntelliJ IDEA 2020.1 (Ultimate Edition) - Build #IU-201.6668.121, built on April 8, 2020
Runtime version: 11.0.6+8-b765.25 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.15.4
Memory: 3987M
Cores: 16
我已经尝试使用来自
的答案
- How do I add a new sourceset to Gradle?
- Gradle SourceSet dependencies in IntelliJ
我将非常感谢建议我如何管理我的 'testutils'-SourceSet,它还使用嵌入式 IntelliJ-Build 构建封闭项目:
- 设置(=构建、执行、部署 > 构建工具 > Gradle)
- build 和 运行 使用 > 'IntelliJ IDEA'(而不是 'Gradle')
- 运行 测试使用 > 'IntelliJ IDEA'(而不是 'Gradle')
我可以找到解决问题的方法。
sourceSet 在模块 A 中定义并在模块 B 中引用。
模块A的sourceSets:
- 主要
- testutils(可以使用 main 并查看 main AND test 的所有依赖项)
- 测试(测试 main + testutils)
在 模块 A (build.gradle) 中:
apply plugin: 'maven'
sourceSets {
testutils
testutils.compileClasspath += sourceSets.main.output
testutils.runtimeClasspath += sourceSets.main.output
test.compileClasspath += sourceSets.testutils.output
test.runtimeClasspath += sourceSets.testutils.output
}
dependencies {
api project('someOtherProjectA')
...
testImplementation project('someOtherProjectZZ')
testutilsImplementation sourceSets.main.compileClasspath
}
...
在 模块 B (build.gradle) 中:
dependencies {
testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
...
}
模块 B 只能访问模块 A 的 sourceSet testutils
。
当我将最初使用 Eclipse 构建的 gradle 项目导入 IntelliJ[=84 时,我指出了一个问题=]. 事实上,该项目是一个 gradle-project,但是当我将它导入 IntelliJ 时,IDE 告诉我它删除了(一些)重复的内容根。
我得到一个气球 - 告诉我:
Duplicate content roots deleted
事件日志中的消息是:
hh:mm[=22:58] Duplicate content roots detected
Path [/Users/.../someProject/someModule] of module [someModuleName] was removed from modules [someModuleName.someSourceSetName]
Also 1 more path was deduplicatetd. See idea log for details
一般来说,它是一个 gradle-project,但我无法在 IntelliJ 中 运行 它。 它在 命令行 (./gradlew build) 上使用 gradle-Wrapper 构建,但我 想使用 IntelliJ 进行构建,以使用(重新编译+重新加载)和 IDE.
的其他功能来提高使用率我有以下模块:
A(A 是我尝试构建的模块)
B(B 是模块,我想在其中重用模块 A 的 sourceSets 'main' 和 'testutils')
模块 A - 包含 3 个源集(=main、test、testutils):
src/main/java
src/test/java
src/testutils/java
模块 A 具有 testutils(消耗 'main')、测试(消耗 'main' & 'testutils')、main(生产java-模块的 src)
和模块B,其中模块A的sourceSet testutils
在main
src中是必需的,并且tests
;
模块 B - 使用 sourceSet 'A/src/main/java' 和 'A/src/testutils/java':
所以我的 gradle 文件是(稍微缩短):
A/build.gradle:
apply plugin: 'maven'
sourceSets {
test.java.srcDirs +='src/testutils/java'
testutils
}
dependencies {
api project('someOtherProjectA')
...
testImplementation project('someOtherProjectZZ')
testutilsImplementation sourceSets.test.compileClasspath
}
task testutilsJar(type: Jar) {
from sourceSets.testutils.output
appendix 'testutils'
}
configurations {
testutils
}
artifacts {
testutils testutilsJar
}
uploadTestutils {
repositories {
mavenDeployer {
configuration = configurations.testutils
repository(url: mavenPublicRepository) {
authentication(userName: repoUsername, password: repoPassword)
}
}
}
}
publish.dependsOn uploadTestutils
B/build.gradlew:
dependencies {
api project('someOtherProjectB')
api "someOtherDependency"
...
testImplementation project('someOtherProjectC')
testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
...
}
我的开发系统设置:
JDK: 11.0.4
Gradle-Wrapper with Version: gradle-5.5.1
IntelliJ IDEA 2020.1 (Ultimate Edition) - Build #IU-201.6668.121, built on April 8, 2020
Runtime version: 11.0.6+8-b765.25 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.15.4
Memory: 3987M
Cores: 16
我已经尝试使用来自
的答案- How do I add a new sourceset to Gradle?
- Gradle SourceSet dependencies in IntelliJ
我将非常感谢建议我如何管理我的 'testutils'-SourceSet,它还使用嵌入式 IntelliJ-Build 构建封闭项目:
- 设置(=构建、执行、部署 > 构建工具 > Gradle)
- build 和 运行 使用 > 'IntelliJ IDEA'(而不是 'Gradle')
- 运行 测试使用 > 'IntelliJ IDEA'(而不是 'Gradle')
我可以找到解决问题的方法。
sourceSet 在模块 A 中定义并在模块 B 中引用。
模块A的sourceSets:
- 主要
- testutils(可以使用 main 并查看 main AND test 的所有依赖项)
- 测试(测试 main + testutils)
在 模块 A (build.gradle) 中:
apply plugin: 'maven'
sourceSets {
testutils
testutils.compileClasspath += sourceSets.main.output
testutils.runtimeClasspath += sourceSets.main.output
test.compileClasspath += sourceSets.testutils.output
test.runtimeClasspath += sourceSets.testutils.output
}
dependencies {
api project('someOtherProjectA')
...
testImplementation project('someOtherProjectZZ')
testutilsImplementation sourceSets.main.compileClasspath
}
...
在 模块 B (build.gradle) 中:
dependencies {
testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
...
}
模块 B 只能访问模块 A 的 sourceSet testutils
。