2013-06-02 33 views
35

Tôi đã có dự án scala biên dịch, chạy và kiểm tra tốt khi sử dụng SBT từ dòng lệnh. Tuy nhiên, khi xây dựng các dự án trong IntelliJ, có vẻ như mọi tầng lớp trong dự án có lỗi này trong bản ghi sự kiện, khiến việc xây dựng thất bại:Thất bại biên dịch Intellij: "đã được định nghĩa là"

SendCommandToService is already defined as case class SendCommandToService 
case class SendCommandToService(service: String, commandName: String, keys: Array[String], values: Array[String]) 
    ^
+0

Bạn đã thử Build -> Rebuild Project chưa? – drexin

+0

vâng, tôi đã thử điều đó. Cảm ơn mặc dù. – Nick

Trả lời

21

Nó có nghĩa là có hai lớp học biên soạn với gói giống hệt nhau và tên lớp tìm thấy trong classpath của bạn. Một biên soạn bởi sbt, một biên soạn bởi IntelliJ.

Một trong những điều sau đây sẽ có thể giải quyết vấn đề:

  1. cố gắng để tạo ra IntelliJ .iml nộp với sbt-idea chứ không phải nhập khẩu trực tiếp.
  2. SBT sạch trước khi nhấp chuột Build -> Rebuild trong IntelliJ
  3. khi xây dựng lại với IntelliJ, hãy chắc chắn SBT không chạy
+0

Sử dụng SBT và chơi bên ngoài IntelliJ, upvoted cho "sbt clean" mà cuối cùng đã làm các trick cho tôi (mặc dù tại một thời điểm tôi đã hạ cấp Scala 2,11 -> 2,10,4 là tốt). –

+0

@JohnLockwood Tôi vẫn có vấn đề này, tôi đã vô hiệu hóa bộ nhớ cache, làm 'sbt clean',' sbt compile' và vẫn còn, kịch bản đơn giản của tôi nhận được một "đã được định nghĩa là đối tượng" .. Tôi thậm chí đổi tên Object và của tôi IntellIJ vẫn cho tôi tùy chọn để chạy đối tượng trước đó. – ypriverol

1

Tôi đã có một vấn đề tương tự lặp đi lặp lại cả trong ý tưởng và không có: đồng bằng SBT.

Hóa ra là các cửa hàng CVS bản sao của một số * .scala tập tin trong thư mục con CVS/Cơ sở, mà SBT dường như cố gắng để biên dịch. Vấn đề đã biến mất khi tôi xóa các thư mục con CVS.

4

Tôi đã có cùng một vấn đề và @Max là đúng, có xung đột với các lớp được biên dịch, nhưng giải pháp được cung cấp không hiệu quả đối với tôi. Nó chỉ ra rằng tôi đã sử dụng ý tưởng sbt để tạo ra cấu trúc dự án IDEA như một giải pháp thay thế của một Intellij IDEA 14 + scala plugin bug về nhập khẩu SBT, mà chưa được sửa vào lúc tôi viết nó.

Để khắc phục, tôi phải xóa src_managed/main/controller xung đột với src_managed/main trong cài đặt Mô-đun vì số sbt-idea bug. Vì vậy, hãy kiểm tra kỹ các thư mục nguồn mô-đun của bạn và đảm bảo rằng bạn không có thư mục con xung đột với một thư mục mẹ đã được khai báo là nguồn.

74

Đối với tôi, lý do là cả hai myproject/srcmyproject/src/main/scala đều được đánh dấu là Nguồn. Vì vậy, intellij không thể xây dựng myproject/src/main/scala do các lỗi trên. Bỏ đánh dấu nguồn từ myproject/src (trong intellij, File-> Project structure, chọn myproject Module, chọn thư mục src trong Sources Tab, loại bỏ nó khỏi Source trong cửa sổ "Add Content Root") đã giải quyết được vấn đề. Hi vọng điêu nay co ich.

+0

Vâng, điều này đã xảy ra với tôi trong dự án hỗn hợp Scala + Java. – expert

+0

Điều này xảy ra khi tôi chuyển dự án của tôi từ 'src' sang' src/main/scala'. –

+0

Tôi đã có vấn đề này bởi vì tôi đã xác định một nhiệm vụ trong SBT để tạo nguồn; IntelliJ không biết để chạy điều này trong khi biên dịch, hoặc thực tế là mã được tạo ra nằm dưới target/scala-2.11/src_managed, vì vậy tôi phải thêm nó như là một đường dẫn nguồn theo cách thủ công, và khi làm như vậy đã làm cho lỗi đánh dấu cả hai phụ huynh và thư mục con dưới dạng nguồn, như được mô tả ở trên. – Luciano

0

Trong trường hợp của tôi, vấn đề là protobuf Idea Plugin:

  1. Hủy bỏ các plugin ý tưởng protbuf.
  2. Đóng Idea
  3. Hủy bỏ tất cả các thư mục liên quan với ý tưởng (.idea và .idea_modules)
  4. mở Idea và nhập khẩu dự án một lần nữa.
0

Sau SBT biên dịch tôi phải đánh dấu các thư mục như Nguồn Generated gốc bởi vì tôi cần các tập tin để biên dịch.

0

Bạn cần thay đổi "Cài đặt -> Xây dựng, thực thi, triển khai -> Trình biên dịch Scala -> Biên dịch đơn đặt hàng" từ "Hỗn hợp" sang "Java sau đó Scala". Nếu bạn đã biên dịch dự án trước đó, trước tiên bạn nên chạy "sbt clean".

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