Hello Dan

I never detect the trouble that you describe but I use idea under is capacity and have not huge skill on gradle.

Furthermore, thanks to share you research it's really useful !

Nicolas


Le 23/10/2024 à 10:37, Daniel Watford a écrit :
If anyone else is having trouble importing ofbiz-framework into IntelliJ
due to duplicate content roots, JetBrains have a survey on the topic here:
https://survey.alchemer.com/s3/7917344/Shared-file-support-in-IntelliJ-IDEA


On Thu, 17 Oct 2024 at 16:18, Daniel Watford<[email protected]>  wrote:

Some progress and a partial explanation of what is happening.

 From various internet searches regarding Gradle and IntelliJ, it seems
that IntelliJ will not import modules from a Gradle build definition where
the same content path is used in multiple modules.

A gradle sourceSet is mapped to an IntelliJ module. A sourceSet will have
one or more srcDirs to location source files in a project.

In our gradle build, defined in build.gradle at the project root, we
utilise two sourceSets, main and test, to which we add numerous srcDirs
from the project's components.

In settings.gradle we also add each of the components as a gradle
sub-project. Each of the sub-projects will have the main and test
sourceSets added by the java plugin, with default directories of
src/main/java, src/test/java, etc.

The duplication appears to come from having both the root project and the
sub-project referring to directories, such as src/main/java. IntelliJ
detects that the two modules are referencing the same path and removes one
of them.

It seems that we don't need each component to be added as a gradle
sub-project in our builds since (in the majority of cases) all sources have
been added to the root project's sourceSets. To test this idea I commented
out the following from settings.gradle:

activeComponents().each { File component ->
     def subProject = (component.toString() - rootDir)
     if (isWindows)
         include subProject.replaceAll('\\' + fileSep, ':')
     else
         include subProject.replaceAll(fileSep, ':')
}

The above code added a gradle sub-project for each component to the root
project. By commenting this code out, the sub-projects were removed and
IntelliJ imported the ofbiz-framework project without error.

I still cannot explain why the duplicate paths issue was only found in the
devcontainer and not when running IntelliJ on the host.

We also cannot simply remove all gradle sub-projects since we do allow use
of gradle tasks in plugins, and we use sub-projects to apply the gradle
node plugin in a few places.

I don't have a solution yet, but just wanted to highlight that some
strange import behaviour in IntelliJ might be related to our potentially
superfluous use of gradle subprojects.

Any ideal on how we should handle gradle sub-projects? Perhaps we only add
sub-project for components that have a build.gradle file?


On Thu, 17 Oct 2024 at 15:00, Daniel Watford<[email protected]>  wrote:

Hello,

I've noticed that if I run IntelliJ in a dev container for the
ofbiz-framework trunk branch, not all source directories are recognised by
the IDE following the Gradle Import process.

After running the IntelliJ Gradle import I see a message similar to the
following:

Path [/IdeaProjects/ofbiz-framework/applications/accounting] of module
[ofbiz.applications.accounting] was removed from modules [ofbiz.main]" Also
18 more paths were deduplicated. See idea log for details

I do not see this message when running IntelliJ directly on the host.

After working on this for several hours, I'm still unable to explain this
discrepancy between the two approaches to running IntelliJ.

Has anyone else noticed this behaviour with IntelliJ and if so, are they
using devcontainers, Windows, Linux, what versions of JDK, etc?

Thanks,

Dan.

--
Daniel Watford


--
Daniel Watford


Reply via email to