2017-02-21 50 views
-1

У меня есть 3 Maven проектов:Как решить maven ОШИБКА COMPILATION: пакета X не существует?

project-A 
project-B 
project-C 

Второй проект (B) требует зависимость для первого проекта (A). Третий проект (C) требует зависимостей для первого и второго проектов (A, B). я определил эту зависимость в соответствующих проектах pom файлов: 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> 

Все работает нормально на SpringToolSuite. Я тестировал второй проект (который зависит от первого проекта), а также тестировал третий проект (который зависит как от первого, так и от второго проекта), и все работает ОК от STS.

Когда я пытаюсь выполнить: MVN чистую установку -U -DskipTests = истинный

это работает отлично для project-A и project-B, но project-C я получаю:

[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 

Ниже приведены 3 класса, извлеченные из каждого из проектов:

Проект-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; 
    } 

} 

Проект-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; 
    } 
} 

Проект-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); 
    } 
} 

Похоже, все в порядке на моем pom.xml файлов. Как я могу это решить?

ответ

1

В соответствии с вашими помещений, pom.xml из проекта Б должны быть:

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

И проект C не нужна зависимость с А, поскольку он определен на B

+0

Да правильно. Я попытался удалить зависимость проекта-A от pom.xml проекта-C и выполнить повторную команду, но получаю ту же ошибку –

+0

Тип упаковки A и B - pom? –

+0

Нет, тип упаковки A и B - jar –