2013-08-04 45 views
5

Tôi đang xây dựng một tiện ích truy vấn cơ sở dữ liệu nhỏ sử dụng Scala và Slick, với Maven làm công cụ xây dựng và đóng gói của tôi.Làm cách nào để giải quyết "lỗi: tham chiếu biểu tượng xấu" cho các phụ thuộc sử dụng plugin maven-scala?

Mã của tôi biên dịch mà không cần bất kỳ lỗi cú pháp, nhưng việc xây dựng thất bại với điều này:

[INFO] --- maven-scala-plugin:2.15.0:compile (default) @ origdups --- 
[INFO] Checking for multiple versions of scala 
[INFO] includes = [**/*.scala,**/*.java,] 
[INFO] excludes = [] 
[INFO] /home/lreeder/dev/scala/origdups/src/main/scala:-1: info: compiling 
[INFO] Compiling 4 source files to /home/lreeder/dev/scala/origdups/target/classes at 1375638972068 
[INFO] No known dependencies. Compiling everything 
[ERROR] error: bad symbolic reference. A signature in Mapper.class refers to term runtime 
[INFO] in package scala.reflect which is not available. 
[INFO] It may be completely missing from the current classpath, or the version on 
[INFO] the classpath might be incompatible with the version used when compiling Mapper.class. 
(several more similar errors) 

Lưu ý rằng lớp Mapper không phải là mã của tôi. Tôi nghĩ đó là một phần của Slick? Tôi đang sử dụng Scala 2.10.1 cho các plugin maven-scala:

<dependency> 
    <groupId>org.scala-lang</groupId> 
    <artifactId>scala-library</artifactId> 
    <version>2.10.1</version> 
</dependency> 

và Slick 2.10 (hiện xây dựng với Scala 2.10.1):

<dependency> 
    <groupId>com.typesafe.slick</groupId> 
    <artifactId>slick_2.10</artifactId> 
    <version>1.0.1</version> 
</dependency> 

tôi đã biên soạn với maven debug quay trên, và đây là cuộc gọi Java tạo ra các lỗi ở trên.

/usr/local/jdk1.7.0_21/jre/bin/java -classpath /home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-compiler/2.10.1/scala-compiler-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-reflect/2.10.1/scala-reflect-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-tools/maven-scala-plugin/2.15.0/maven-scala-plugin-2.15.0.jar -Xbootclasspath/a:/home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar org_scala_tools_maven_executions.MainWithArgsInFile scala.tools.nsc.Main /tmp/scala-maven-6314934214401019063.args

Tôi thiếu gì ở đây? Những gì cần phải được thiết lập trong cấu hình plugin maven-scala để loại bỏ các lỗi này.

Trả lời

6

lỗi này:

error: bad symbolic reference. A signature in Mapper.class refers to term runtime in package scala.reflect which is not available.

đang nói scala.reflect.runtime đó là mất tích từ classpath. Và, thực sự, khi kiểm tra /tmp/scala-maven-6314934214401019063.args, nó không có trong classpaths được liệt kê ở đó.

Slick 2.10 có phụ thuộc vào gói phản chiếu Scala. Xem https://github.com/slick/slick/blob/master/src/main/scala/scala/slick/direct/MetadataProvider.scala. Vì vậy, POM cho Slick nên liệt kê scala-phản ánh để các dự án khác có thể giải quyết nó như là một phụ thuộc transitive. Tuy nhiên, slick_2.10-1.0.1.pom không liệt kê scala-reflect.

Thêm scala-phản ánh là phụ thuộc trong dự án của riêng tôi POM đã sửa lỗi này.

+0

Tôi đang có cùng nhưng bên trong một dự án đa mô-đun và lớp bị thiếu là một lớp thuộc về một trong các mô-đun của tôi (và thực tế là có) .Bạn có gợi ý gì không? – Edmondo1984

+0

Đảm bảo rằng mô-đun phụ thuộc vào lớp bị thiếu có mô-đun chứa phụ thuộc vào POM Maven của bạn. Nếu được đặt, hãy chạy maven ở chế độ gỡ lỗi (tùy chọn -X) và kiểm tra tệp ".args" trong lệnh maven-scala-plugin (xem phần cuối của lệnh java trong câu hỏi của tôi). Đó là tập tin args nên chứa jar với sự phụ thuộc của bạn trong classpath của nó. Nếu không, bạn cần phải tìm cách để có được nó ở đó. Tôi đã có thể làm như vậy bằng cách thêm một phụ thuộc vào POM của tôi. – lreeder

+1

Thực ra tôi đã tìm thấy vấn đề. Nếu bạn có hai đối tượng gói scala có cùng tên (và phân cấp khác nhau), thì điều này không biên dịch. – Edmondo1984