当我将一个最初用Eclipse构建的gradle项目导入IntelliJ时,我指出了一个问题。实际上,该项目是一个gradle-project,但当我将其导入IntelliJ时,IDE告诉我它删除了(一些)重复的内容根。
我得到一个气球-告诉我:
删除了重复的内容根
一般来说,它是一个分级项目,但我不能在IntelliJ中运行它。它在命令行(./gradlew build)上使用gradle-Wrapper进行构建,但我希望使用IntelliJ进行构建,以改进使用(重新编译+重新加载)和IDE的其他特性的使用。
我有以下模块:
>
A(A是我尝试构建的模块)
src/main/java
src/test/java
src/testutils/java
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
我已经试过使用
我能找到解决我问题的办法。
源集在模块A中定义,并在模块B中引用。
模块A的源集:
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
}
...
dependencies {
testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
...
}
模块B只能访问模块A的源集testUtils
。