-1

I have 3 maven projects:

project-A
project-B
project-C

The second project (B) requires the dependency for the first project (A). The third project (C) requires the dependencies for the first and second project (A, B). I have defined these dependencies in the respective projects pom files: project-B pom.xml :

    <dependency>
        <groupId>com.mygroupid</groupId>
        <artifactId>project-A</artifactId>
        <version>${project.version}</version>
    </dependency>

project-C pom.xml :

    <dependency>
        <groupId>com.mygroupid</groupId>
        <artifactId>project-A</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>com.mygroupid</groupId>
        <artifactId>project-B</artifactId>
        <version>${project.version}</version>
    </dependency>

Everything works OK on SpringToolSuite. I have tested the second project (which depends on the first project) and also tested the third project (which depends on both first and second project) and everything works OK from STS.

When I try to execute: mvn clean install -U -DskipTests=true

it works perfectly well for project-A and project-B, but for project-C I get a:

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] MyClassOnProjectC.java:[12,38] package XXX does not exist
[ERROR] MyClassOnProjectC.java:[22,17] cannot find symbol
  symbol:   class MyClassOnProjectB
  location: class MyClassOnProjectC

Below there are 3 classes extracted from each of the projects:

Project-A: User.java

package com.neweraed.datamodel;

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "UserType", propOrder = {
    "name",
    "description",
})
public class User  implements Serializable {    
    private static final long serialVersionUID = -876063526825526098L;

    private String name;
    private String description;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

Project-B: UserOperations.java

package com.neweraed.services.midpoint;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestOperations;

import com.neweraed.datamodel.User;
import com.neweraed.services.midpoint.utils.Constants;
import com.neweraed.services.midpoint.utils.Utils;

@Component
public class UserOperations {

    private static final Logger logger = LoggerFactory.getLogger(UserOperations.class);

    public User getUser(User user) {
        RestOperations restOperations = Utils.createGenericRestTemplate();
        ResponseEntity<User> response = null;
        try {
            response = restOperations.exchange(Constants.ENDPOIT_SEARCH_USER, HttpMethod.GET, new HttpEntity<Object>(Utils.createHeaders()), User.class);

            logger.info("=== RESPONSE ===" + response + " === ");
        } catch (Exception e) {
            logger.error("=== ERROR === " + e.getMessage() + " === ");
        }
        return user;
    }
}

Project-C: UserService.java

package com.neweraed.rest;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.neweraed.datamodel.User;
import com.neweraed.services.midpoint.UserOperations;

@RestController
@RequestMapping(value="/api/v1/users")
public class UserService {


    @RequestMapping(value="/", method=RequestMethod.POST)
    public User addUser(@RequestBody User user) {
        UserOperations userOperations = new UserOperations();
        return userOperations.addUser(user);
    }
}

It seems like everything is OK on my pom.xml files. How can I solve this?

Blerta Dhimitri
  • 2,613
  • 4
  • 19
  • 30

1 Answers1

1

According to your premises, pom.xml of the project B must be:

<dependency>
    <groupId>com.mygroupid</groupId>
    <artifactId>project-A</artifactId>
    <version>${project.version}</version>
</dependency>

And project C doesn't need the dependency with A because it is defined on B

bra_racing
  • 602
  • 1
  • 8
  • 28