2012-02-25 43 views
10

Như bạn đã biết, các phiên bản mới của SBT (như 0,11) được thiết kế để duy trì bộ nhớ cache của thư viện phổ biến trong ~/.ivy2/cache thay vì sao chép toàn bộ các phụ thuộc trong thư mục dự án. Nhưng IntelliJ Idea (tôi sử dụng SBT plugin để tạo dự án Idea) mặc định dường như bỏ qua bộ đệm chung và chỉ xem các thư viện được đặt trong thư mục dự án (vì vậy, tôi phải cấu hình SBT để hành động theo cách cũ này). Làm thế nào để sửa lỗi này?Làm thế nào để thiết lập dự án IntelliJ Idea Scala để nhận ra bộ nhớ cache Ivy2 cục bộ?

Có một số plugin Ivy trong kho lưu trữ plugin Idea, nhưng tôi không biết cái nào (nếu có) có thể giải quyết vấn đề (lưu ý rằng tôi không muốn quản lý phụ thuộc và tải xuống thư viện) vì nó được thực hiện bởi SBT) nhưng chỉ để tìm các lớp trong bộ nhớ đệm).

Trả lời

7

ý tưởng sbt đề cập đến các thư viện ở các vị trí mà sbt đề cập đến chúng, theo mặc định là dưới ~/.ivy2/cache.

Sau đây là cách nó trông giống trên hệ thống của tôi, với một dự án mới, SBT 0.11.2, và SBT-ý tưởng 0.11.0:

~/code/scratch/20120225 sbt 
[info] Loading global plugins from /Users/jason/.sbt/plugins 
[info] Set current project to default-d73535 (in build file:/Users/jason/code/scratch/20120225/) 

> set libraryDependencies += "org.scalaz" %% "scalaz-core" % "6.0.3" 
[info] Reapplying settings... 
[info] Set current project to default-d73535 (in build file:/Users/jason/code/scratch/20120225/) 

> session save 
[info] Reapplying settings... 
[info] Set current project to default-d73535 (in build file:/Users/jason/code/scratch/20120225/) 

> gen-idea no-sbt-classifiers 
[info] Trying to create an Idea module default-d73535 
[info] Resolving org.scala-lang#scala-library;2.9.1 ... 
[info] Resolving org.scalaz#scalaz-core_2.9.1;6.0.3 ... 
[info] Excluding folder target 
[info] Created /Users/jason/code/scratch/20120225/.idea/IdeaProject.iml 
[info] Created /Users/jason/code/scratch/20120225/.idea 
[info] Excluding folder /Users/jason/code/scratch/20120225/target 
[info] Created /Users/jason/code/scratch/20120225/.idea_modules/default-d73535.iml 
[info] Created /Users/jason/code/scratch/20120225/.idea_modules/project.iml 

    ~/code/scratch/20120225 grep jar /Users/jason/code/scratch/20120225/.idea/libraries/*.xml 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scala_lang_scala_library_2_9_1.xml:  <root url="jar://$USER_HOME$/.sbt/boot/scala-2.9.1/lib/scala-library.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scala_lang_scala_library_2_9_1.xml:  <root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-library/docs/scala-library-2.9.1-javadoc.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scala_lang_scala_library_2_9_1.xml:  <root url="jar://$USER_HOME$/.ivy2/cache/org.scala-lang/scala-library/srcs/scala-library-2.9.1-sources.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scalaz_scalaz_core_2_9_1_6_0_3.xml:  <root url="jar://$USER_HOME$/.ivy2/cache/org.scalaz/scalaz-core_2.9.1/jars/scalaz-core_2.9.1-6.0.3.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scalaz_scalaz_core_2_9_1_6_0_3.xml:  <root url="jar://$USER_HOME$/.ivy2/cache/org.scalaz/scalaz-core_2.9.1/docs/scalaz-core_2.9.1-6.0.3-javadoc.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scalaz_scalaz_core_2_9_1_6_0_3.xml:  <root url="jar://$USER_HOME$/.ivy2/cache/org.scalaz/scalaz-core_2.9.1/srcs/scalaz-core_2.9.1-6.0.3-sources.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/scala_2_9_1.xml:  <root url="jar://$USER_HOME$/.sbt/boot/scala-2.9.1/lib/scala-library.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/scala_2_9_1.xml:  <root url="jar://$USER_HOME$/.sbt/boot/scala-2.9.1/lib/scala-compiler.jar!/"></root> 

Tuy nhiên, SBT có một thiết lập cấu hình, retrieve-managed sử dụng làm một bản sao xây dựng cục bộ của tất cả các thư viện, thay vì trực tiếp đề cập đến chúng từ bộ nhớ cache. Nếu bạn đã bật tính năng này, sbt-idea cũng sẽ thiết lập đường dẫn lớp IntelliJ để tham khảo các trường này.

Dưới đây là sự giúp đỡ:

> help retrieve-managed 

If true, enables retrieving dependencies to the current build. Otherwise, dependencies are used directly from the cache. 

Hãy thử nó ra:

> set retrieveManaged in ThisBuild := true 
[info] Reapplying settings... 
[info] Set current project to default-d73535 (in build file:/Users/jason/code/scratch/20120225/) 
> update 
[info] Updating {file:/Users/jason/code/scratch/20120225/}default-d73535... 
[info] Resolving org.scala-lang#scala-library;2.9.1 ... 
[info] Resolving org.scalaz#scalaz-core_2.9.1;6.0.3 ... 
[info] Done updating. 
[success] Total time: 1 s, completed Feb 25, 2012 9:07:41 AM 
> show compile:dependency-classpath 
[info] Updating {file:/Users/jason/code/scratch/20120225/}default-d73535... 
[info] Resolving org.scala-lang#scala-library;2.9.1 ... 
[info] Resolving org.scalaz#scalaz-core_2.9.1;6.0.3 ... 
[info] Done updating. 
[info] ArrayBuffer(Attributed(/Users/jason/.sbt/boot/scala-2.9.1/lib/scala-library.jar), Attributed(/Users/jason/code/scratch/20120225/lib_managed/jars/org.scalaz/scalaz-core_2.9.1/scalaz-core_2.9.1-6.0.3.jar)) 
[success] Total time: 0 s, completed Feb 25, 2012 9:07:54 AM 


> gen-idea no-sbt-classifiers 
[info] Trying to create an Idea module default-d73535 
[info] Resolving org.scala-lang#scala-library;2.9.1 ... 
[info] Resolving org.scalaz#scalaz-core_2.9.1;6.0.3 ... 
[info] Excluding folder target 
[info] Created /Users/jason/code/scratch/20120225/.idea/IdeaProject.iml 
[info] Created /Users/jason/code/scratch/20120225/.idea 
[info] Excluding folder /Users/jason/code/scratch/20120225/target 
[info] Created /Users/jason/code/scratch/20120225/.idea_modules/default-d73535.iml 
[info] Created /Users/jason/code/scratch/20120225/.idea_modules/project.iml 

~/code/scratch/20120225 grep jar /Users/jason/code/scratch/20120225/.idea/libraries/*.xml 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scala_lang_scala_library_2_9_1.xml:  <root url="jar://$USER_HOME$/.sbt/boot/scala-2.9.1/lib/scala-library.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scala_lang_scala_library_2_9_1.xml:  <root url="jar://$PROJECT_DIR$/lib_managed/docs/org.scala-lang/scala-library/scala-library-2.9.1-javadoc.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scala_lang_scala_library_2_9_1.xml:  <root url="jar://$PROJECT_DIR$/lib_managed/srcs/org.scala-lang/scala-library/scala-library-2.9.1-sources.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scalaz_scalaz_core_2_9_1_6_0_3.xml:  <root url="jar://$PROJECT_DIR$/lib_managed/jars/org.scalaz/scalaz-core_2.9.1/scalaz-core_2.9.1-6.0.3.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scalaz_scalaz_core_2_9_1_6_0_3.xml:  <root url="jar://$PROJECT_DIR$/lib_managed/docs/org.scalaz/scalaz-core_2.9.1/scalaz-core_2.9.1-6.0.3-javadoc.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/org_scalaz_scalaz_core_2_9_1_6_0_3.xml:  <root url="jar://$PROJECT_DIR$/lib_managed/srcs/org.scalaz/scalaz-core_2.9.1/scalaz-core_2.9.1-6.0.3-sources.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/scala_2_9_1.xml:  <root url="jar://$USER_HOME$/.sbt/boot/scala-2.9.1/lib/scala-library.jar!/"></root> 
/Users/jason/code/scratch/20120225/.idea/libraries/scala_2_9_1.xml:  <root url="jar://$USER_HOME$/.sbt/boot/scala-2.9.1/lib/scala-compiler.jar!/"></root> 
+0

lớn +1, cũng áp dụng cho Eclipse hoặc là IntelliJ này thôi há? – virtualeyes

+0

'no-sbt-classifiers' làm gì? –

+0

Tôi đã thực sự sử dụng truy xuất được quản lý để mọi thứ hoạt động. Lần cuối cùng tôi đã cố gắng tránh nó dẫn đến các vấn đề với Idea nhìn thấy các thư viện. Đó là ý tưởng 10 mặc dù, có thể nó được sửa trong 11 ... – Ivan

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