2012-06-23 32 views
8

Tôi đang cố gắng biên dịch một dự án hỗn hợp Java/Scala Maven có lớp Scala phụ thuộc vào một bean Java có chú thích lombok. Tôi đã thử thêm các tập tin jar lombok vào classpath khởi động của trình biên dịch Scala cũng như các đại lý lombok, nhưng trình biên dịch vẫn không tìm thấy các getters tạo ra. Có cách nào để trình biên dịch Scala nhận ra chú thích lombok không? Nếu không, điều gì sẽ là một giải pháp tốt?Lỗi khi biên soạn dự án Java/Scala hỗn hợp và Lombok

Xin lưu ý rằng tôi đang cố gắng tránh giới thiệu một dự án maven khác chỉ để biên dịch bean này trước tiên vì bean hợp lý thuộc về cùng một dự án. Ngoài ra tôi không thể viết lại đậu trong Scala vì nó sau này được sử dụng trong một dự án GWT.

Cảm ơn bạn,

Trả lời

9

Tôi nghĩ rằng bạn sẽ không thể tránh nó. Tích hợp Scala/Java bình thường như sau:

  1. Scala đi đầu tiên, vì Java không biết gì về Scala.
    1. Phân tích cú pháp trình phân tích cú pháp Tệp Java và tìm hiểu về các thành phần hiển thị.
    2. Scalac đọc tệp Scala và tạo tệp lớp.
  2. Java đi cuối cùng và đọc tệp Java cùng với tệp lớp do Scala tạo.

Vấn đề rõ ràng là Scala không biết gì về chú thích Lombok, vì vậy nó không thể tìm ra các yếu tố do nó tạo ra.

Nếu bạn không có bất kỳ sự phụ thuộc nào từ Java sang Scala, bạn có thể đơn giản đảo ngược thứ tự: hãy để Java đi trước và có Scala bao gồm các tệp lớp đầu ra của javac trên đường dẫn lớp của nó.

Nếu không, tôi cho rằng bạn sẽ cần phải chia nhỏ.

+0

Cảm ơn Daniel. Hầu hết các phụ thuộc đi từ Java đến Scala. Cho đến nay nó chỉ là những loại đậu tạo ra sự phụ thuộc ngược lại. – Eduardo

+0

Nhà phát triển Lombok ở đây: Bạn có thể biết _how_ scala phân tích cú pháp các tệp java không? ecj? javac? Trình phân tích cú pháp được kiểm tra? Tôi cũng tự hỏi liệu quá trình này có hỗ trợ bộ vi xử lý chú thích không. Nếu có, chúng tôi có thể làm điều gì đó. – rzwitserloot

+0

@rzwitserloot [Trình phân tích cú pháp được kiểm soát] (https://github.com/scala/scala/tree/master/src/compiler/scala/tools/nsc/javac) (điều đáng ngạc nhiên - công việc của ông đã trở thành cơ sở cho javac bắt đầu bằng JDK 1.3). Nó không hỗ trợ bộ xử lý chú thích. –

Các vấn đề liên quan