kovac
kovac

Reputation: 5389

Eclipse fails to build maven multi-module project

I'm trying to build a multi-module maven project in Eclipse, however, I get 8670 Java Problems in Eclipse Oxygen. My project has one parent project with its pom.xml that has the following secion declaring sub-modules:

<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.neo4j</groupId>
<artifactId>graph-algorithms-parent</artifactId>
<version>3.3.2.0</version>
<packaging>pom</packaging>
<name>Neo4j Graph Algorithms</name>
<description>Efficient Graph Algorithms for Neo4j</description>

<profiles>
    <profile>
        <id>Benchmark</id>
        <modules>
            <module>benchmark</module>
        </modules>
    </profile>
</profiles>

<modules>
    <module>core</module>
    <module>algo</module>
    <module>tests</module>
</modules>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <neo4j.version>3.3.1</neo4j.version>
    <jmh.version>1.19</jmh.version>
    <javac.target>1.8</javac.target>
</properties>

<organization>
    <name>Neo4j, Inc.</name>
    <url>https://neo4j.com</url>
</organization>

<developers>
    <developer>
        <id>neo-technology</id>
        <organization>Neo4j, Inc.</organization>
        <url>https://neo4j.com</url>
    </developer>
    <developer>
        <id>avgl</id>
        <organization>Avantgarde Labs GmbH</organization>
        <url>https://avantgarde-labs.de</url>
    </developer>
</developers>

<url>https://github.com/neo4j-contrib/neo4j-graph-algorithms</url>

<scm>
    <url>https://github.com/neo4j-contrib/neo4j-graph-algorithms</url>
</scm>

<licenses>
    <license>
        <name>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</name>
        <url>https://www.gnu.org/licenses/gpl.txt</url>
        <comments>
            Note that this license is for the project itself, and not for its dependencies.
            See the included NOTICE.txt file for further details.
        </comments>
        <distribution>repo</distribution>
    </license>
</licenses>


<dependencyManagement>

    <dependencies>

        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j</artifactId>
            <version>${neo4j.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-kernel</artifactId>
            <version>${neo4j.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-io</artifactId>
            <version>${neo4j.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>net.biville.florent</groupId>
            <artifactId>neo4j-sproc-compiler</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>

        <!-- Benchmark Dependencies -->
        <dependency>
            <groupId>org.openjdk.jmh</groupId>
            <artifactId>jmh-core</artifactId>
            <version>${jmh.version}</version>
        </dependency>
        <dependency>
            <groupId>org.openjdk.jmh</groupId>
            <artifactId>jmh-generator-annprocess</artifactId>
            <version>${jmh.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Test Dependencies -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>


<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <!-- Neo4j Procedures require Java 8 -->
                <compilerVersion>${javac.target}</compilerVersion>
                <source>${javac.target}</source>
                <target>${javac.target}</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <executions>
                <execution>
                    <id>attach-javadocs</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
               <additionalparam>-Xdoclint:none</additionalparam>
            </configuration>
        </plugin>
       <plugin>
           <groupId>org.asciidoctor</groupId>
           <artifactId>asciidoctor-maven-plugin</artifactId>
           <version>1.5.3</version>
           <inherited>false</inherited>
           <executions>
               <execution>
                   <id>generate-docs</id>
                   <phase>package</phase>
                   <goals>
                       <goal>process-asciidoc</goal>
                   </goals>
               </execution>
           </executions>
           <configuration>
               <backend>html5</backend>
               <!--preserveDirectories>true</preserveDirectories -->
               <imagesDir>images</imagesDir>
               <sourceDirectory>${basedir}/doc</sourceDirectory>
               <sourceDocumentName>index.adoc</sourceDocumentName>
               <outputDirectory>${basedir}/target/docs</outputDirectory>
               <attributes>
                   <neo4j-version>${project.version}</neo4j-version>
               </attributes>
               <requires>
                   <require>asciidoctor-diagram</require>
               </requires>
               <source-highlighter>coderay</source-highlighter>
               <coderay-css>style</coderay-css>
           </configuration>
           <dependencies>
           <dependency>
               <groupId>org.asciidoctor</groupId>
               <artifactId>asciidoctorj-diagram</artifactId>
               <version>1.3.1</version>
           </dependency>
           </dependencies>
       </plugin>
        <plugin>
            <groupId>com.mycila.maven-license-plugin</groupId>
            <artifactId>maven-license-plugin</artifactId>
            <version>1.10.b1</version>
            <configuration>
                <header>gplv3-header.txt</header>
                <strictCheck>true</strictCheck>
                <failIfMissing>true</failIfMissing>
                <includes>
                    <include>**/*.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>

Then I have the 4 sub-modules benchmark, core, algo, tests with their own pom.xml all referencing the parent project correctly (with the correct version number). The actual project is from neo4j which you can find here.

I tried doing a maven clean install and the project builds successfully without any issues. However, when I import the projects to Eclipse, I get many errors (mostly from the parent project) that states either ... cannot be resolved to a type or ... cannot be resolved.

I tried doing a Maven -> Update Project without any success. I'm in the Project Explorer view in Eclipse with all 5 projects at the same level.

I also tried adding a Active Maven Profiles in Eclipse, however, did not resolve the issue. My Embedded Maven version is 3.3.9/1.8.2.20171007-0216

Upvotes: 0

Views: 1642

Answers (1)

kovac
kovac

Reputation: 5389

I found the issue. Problem was, my Eclipse workspace was the directory called workspace. However, my maven projects were in a subfolder I created called my_project. When I cloned the repo, I cd into my_project and did git clone.

So, instead of choosing the highest level workspace folder as my Eclipse workspace, I chose the /workspace/my_project as workspace and the issue resolved.

Upvotes: 0

Related Questions