2016-08-21 3 views
0

저는 다중 프로젝트 gradle + spring-boot 구성을 가지고 있습니다. "상호 운용성"일반적인 클래스가 포함되어 프로젝트와 다른 두 개의 프로젝트가 a는있다 "백엔드"과 : 의존성 등이 다른 프로젝트를 포함하는 "프론트 엔드는"이 같은 :봄철 원격 : es.interop.dto.NameDto는 es.interop.dto.NameDto로 캐스팅 될 수 없습니다.

compile project(":interop") 

은 내가 RMI를 실행 ": frontend"에서 ": backend"로 호출하십시오. .gradlew 빌드를 실행하고 커맨드 라인에서 생성 된 jar 파일을 실행하면 오류가 발생하지 않습니다. "프런트 엔드"나는 이클립스에서 직접 실행하는 경우하지만 난에 다음과 같은 오류가

java.lang.ClassCastException: es.interop.dto.NameDto cannot be cast to es.interop.dto.NameDto 

는 파일 시스템에 NameDto.class의 두 사본이 있습니다.

$ grep interop frontend/.classpath 
<classpathentry kind="src" path="/interop"/> 

모든 접착제는 환영합니다 :

$ find ~ -name NameDto.class 
./interop/bin/es/interop/dto/NameDto.class 
./interop/build/classes/main/es/interop/dto/NameDto.class 

.classpath는 다음과 같이 프로젝트를 포함하고 있습니다.

편집 서비스 정의는 : 나는 데브 - 도구를 사용하고

public interface NameService { 
    List<NameDto> findAll(); 
    NameDto create(String value); 
} 

편집.

compile("org.springframework.boot:spring-boot-devtools:1.3.0.RELEASE") 
+0

스프링 부트의 DevTools를 사용하고 있습니까? –

+0

Andy : 당신 말이 맞아요. 나는 그것을 제거하고 그것을 작동합니다. 하지만 아마도 이것이 최선의 해결책은 아닙니다. 나는 다른 사람들이 유익 할 수 있도록 질문을 다시한다. 그에 따라 대답을 줄 수 있습니까? – user2108278

+0

안녕하세요, Andy, 나는 내 초보자 질문에 대답하고 있습니다. 더 나은 것을 제공해주십시오. – user2108278

답변

0

한 번 시작된 코드를 변경하지 않고도 Dev-Tools가 항상 시작될 때마다 다시로드된다는 것을 알게되었습니다. 이 재로드에서는 NameDto의 바이트 코드가 백엔드 및 프론트 엔드에서 수정되어 두 가지 버전 클래스가 표시됩니다.

Dev-Tools 종속성 제거가 효과적입니다.

Dev-Tools 문서에서 더 나은 답변을 찾으려면 JRebel 또는 SpringLoaded와 같은 Java 에이전트 외에 Dev-Tools를 사용하면 시작시 다시로드 할 수 없으므로 작동해야합니다.

관련 문제