I'm indicating a problem, when i import a gradle project, which is originally built with Eclipse ,into IntelliJ. In fact the project is a gradle-project, but when I import it into IntelliJ the IDE tells me that it deletes (some) duplicate content roots.
I get a balloon - telling me:
Duplicate content roots deleted
the message in the Event-Log is:
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
In General it is a gradle-project, but I'm not able to run it in IntelliJ. It builds using gradle-Wrapper on the command-line (./gradlew build), but I would like to build with IntelliJ to improve the usage using (recompile+reload) and other features of the IDE.
I have the following modules:
A (A is the module i try to build)
B (B is the module, where i want to reuse the sourceSets 'main' AND 'testutils' of module A)
Module A - consists of 3 sourceSets (=main, test, testutils):
src/main/java
src/test/java
src/testutils/java
Module A has the dependencies for testutils (consuming 'main'), test (consuming 'main' & 'testutils'), main (production java-src of the module)
And Module B where the sourceSet testutils
of Module A is required within the main
src and the tests
;
Module B - consumes sourceSet 'A/src/main/java' and 'A/src/testutils/java':
So my gradle files are (slightly shortened):
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')
...
}
My DEV-System-Settings:
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
I have already tried using the answers from
I would be very grateful for an advise how I could manage my 'testutils'-SourceSet that it also builds the enclosing project with the embedded IntelliJ-Build:
I could find a solution for my problem.
The sourceSet is defined in module A and referenced in module B.
The sourceSets of module A:
in module 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
}
...
in module B (build.gradle):
dependencies {
testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
...
}
Module B gets only access to the sourceSet testutils
of Module A.