I used InteliJ and I didn't like that it doesn't really understand project structure and especially profiles. NB works with maven to figure out dependencies and you can use profiles to share build groups with other devs.

For example here you have a full build and a utils build that can be built separately (not always great, but it works good enough in NB):

<?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>pl.myproject</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>myproject</name>

    <modules>
        <module>myproject-core</module>
        <module>myproject-saas</module>
        <module>myproject-utils</module>
        <module>myproject-dwh</module>
        <module>myproject-lms-client</module>
        <module>myproject-extapp</module>
        <module>myproject-opac</module>
    </modules>

    <profiles>
        <!-- default -->
        <profile>
            <id>full</id>
            <activation>
<activeByDefault>true</activeByDefault>
            </activation>
            <modules>
                <module>myproject-core</module>
                <module>myproject-saas</module>
                <module>myproject-lms-client</module>
                <module>myproject-extapp</module>
                <module>myproject-aash</module>
                <module>myproject-utils</module>
                <module>myproject-dwh</module>
                <module>myproject-opac</module>
            </modules>
        </profile>

        <!-- UTILS -->
        <profile>
            <id>utils-build-only</id>
            <properties>
<skip.integration.tests>true</skip.integration.tests>
<skip.unit.tests>true</skip.unit.tests>
            </properties>
            <modules>
                <module>myproject-saas</module>
                <module>myproject-utils</module>
            </modules>
        </profile>
        <profile>
            <id>utils-development</id>
            <properties>
<skip.integration.tests>true</skip.integration.tests>
            </properties>
            <modules>
                <module>myproject-saas</module>
                <module>myproject-utils</module>
            </modules>
        </profile>
        <profile>
            <id>utils-full</id>
            <modules>
                <module>myproject-saas</module>
                <module>myproject-utils</module>
            </modules>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
                <version>3.14.0</version>
                <configuration>
                    <release>17</release>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
<groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.24.3</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>



Blake McBride (2025-09-18 22:42):
According to ChatGPT:

If you have *multiple source roots*, Maven itself only supports a *single* |<sourceDirectory>| and |<testSourceDirectory>| in the |<build>| section. To handle *more than one*, you need to *declare one as the “main”* and then use the |build-helper-maven-plugin| to add the rest.

This is one of many reasons I resorted to my own build system.

(BTW, IntelliJ supports any number of source roots.)

--blake

Reply via email to