microsoft / vscode-maven

VSCode extension "Maven for Java"
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-maven
Other
179 stars 88 forks source link

VS Code only shows modules from subfolders #1029

Open dennis-yemelyanov opened 4 months ago

dennis-yemelyanov commented 4 months ago

Maven seems to allow adding modules that are not in a subfolder of the parent module. For example:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>example.parent</artifactId>
    <version>0.1.0</version>
    <packaging>pom</packaging>

    <modules>
        <module>abc</module>
        <module>..\xyz</module>
    </modules>
</project>

When opening the parent project folder in VS Code, it only shows the parent project and abc in the list of projects, but xyz is not shown, probably because it's not located in a subfolder.

Running mvn install in the parent project works successfully though, and builds xyz as expected.

Is VS Code expected to show xyz as well or is there any setting to enable this?

imerljak commented 2 months ago

The plugin identifies the projects by scanning the open workspaces for pom.xml files. It means that any maven project not open at vscode won't be picked.

Looking over at the current implementation, it will require re-thinking the whole project scanning logic in order to properly do what you're asking.

BUT... you can overcome this by using a workspace file and adding the external project into it. Then the external project will be picked up properly by adding to the parent pom modules definition.

Example workspace file..

{
  "folders": [
    {
      "path": "my-project"
    },
    {
      "path": "lib-outside-project-folder"
    },
  ],
  "settings": {
    "maven.view": "hierarchical"
  }
}

when using maven.view=hierarchical its clear that your external module was picked properly

Example pom.xml setup..

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-project</artifactId>
  <modules>
    <module>child-module-1</module>
    <module>child-module-2</module>
    <module>../lib-outside-project-folder</module>
  </modules>
</project>