2012-06-23 2 views
8

Java bean에 의존하는 Scala 클래스가있는 Maven Java/Scala 혼합 프로젝트를 롬복 주석으로 컴파일하려고합니다. 나는 롬복 에이전트뿐만 아니라 스칼라 컴파일러의 부트 클래스 패스에 롬복 jar 파일을 추가하려고 시도했지만 컴파일러는 여전히 생성 된 getter를 찾지 못했습니다. Scala 컴파일러가 롬복 주석을 인식 할 수있는 방법이 있습니까? 그렇지 않은 경우 좋은 해결 방법은 무엇입니까?Java/Scala 혼합 프로젝트 및 Lombok을 컴파일하는 중 오류가 발생했습니다.

Pease note는 bean이 논리적으로 같은 프로젝트에 속하기 때문에이 bean을 먼저 컴파일하기 위해 다른 maven 프로젝트를 소개하는 것을 피하려고합니다. 또한 나중에 GWT 프로젝트에서 사용되기 때문에 스칼라에서 빈을 다시 작성할 수 없다.

고맙습니다.

답변

9

나는 그것을 피할 수 없을 것이라고 생각합니다. 일반적인 스칼라/자바 통합은 다음과 같이 작동합니다.

  1. 자바는 스칼라에 대해 전혀 몰라서 스칼라가 먼저 나옵니다.
    1. Scalac은 Java 파일을 구문 분석하고 표시되는 요소에 대해 학습합니다.
    2. Scalac은 Scala 파일을 읽고 클래스 파일을 생성합니다.
  2. Java는 마지막으로 Java 파일과 Scala에서 생성 한 클래스 파일을 읽습니다.

명백한 문제는 스칼라가 롬 보크 어노테이션에 대해 알지 못하기 때문에, 스칼라가 롬 보크 어노테이션을 생성하지 못한다는 것입니다.

Java에서 Scala 로의 종속성이 없다면 순서를 뒤집을 수 있습니다. Java를 먼저 수행하고 스칼라에 클래스 경로에 javac의 출력 클래스 파일을 포함시킬 수 있습니다.

그렇지 않으면, 당신은 그것을 해체해야 할 것입니다.

+0

다니엘 감사합니다. 종속성의 대부분은 Java에서 Scala로 이동합니다. 지금까지는 역 의존성을 만드는 것은 이러한 종류의 빈들뿐입니다. – Eduardo

+0

롬복 개발자는 여기입니다 : _how_ scala가 자바 파일을 파싱하는지 알고 계십니까? ecj? javac? 조작 된 파서? 이 프로세스가 어노테이션 프로세서를 전혀 지원하는지 궁금합니다. 그렇다면 무언가를 할 수있을 것입니다. – rzwitserloot

+0

@rzwitserloot [Handledled parser] (https://github.com/scala/scala/tree/master/src/compiler/scala/tools/nsc/javac) (놀라워 야합니다 - 그의 작업이 JDK 1.3으로 시작하는 javac). 주석 처리기는 지원하지 않습니다. –

관련 문제