2012-02-25 18 views
10

Como probablemente sepa, las nuevas versiones de SBT (como 0.11) están diseñadas para mantener un caché de bibliotecas común en ~/.ivy2/cache en lugar de copiar el conjunto completo de dependencias dentro de un directorio de proyecto. Pero IntelliJ Idea (utilizo el plugin SBT para generar un proyecto Idea) por defecto parece ignorar el caché común y solo veo las bibliotecas ubicadas bajo el directorio del proyecto (entonces, tengo que configurar SBT para que actúen de esta manera). ¿Cómo arreglar esto?Cómo configurar un proyecto IntelliJ Idea Scala para reconocer el caché Ivy2 local?

Existen algunos complementos de Ivy en el repositorio de los complementos de Idea, pero no sé cuál (si alguno) puede resolver el problema (tenga en cuenta que no quiero que administre las dependencias y descargue las bibliotecas (como lo hace SBT) pero solo para buscar clases en el caché).

Respuesta

7

sbt-idea hace referencia a las bibliotecas en las ubicaciones a las que se refiere sbt, que por defecto está debajo de ~/.ivy2/cache.

Así es como se ve en mi sistema, con un proyecto fresco, SBT 0.11.2 y 0.11.0 SBT-idea:

~/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> 

Sin embargo, SBT tiene un valor de configuración, retrieve-managed utilizar hacer una copia local de todas las bibliotecas, en lugar de referirse directamente a ellas desde la memoria caché. Si tiene esto habilitado, sbt-idea también configurará el classpath de IntelliJ para referirse a estos.

Aquí está la ayuda:

> help retrieve-managed 

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

Probemos a cabo:

> 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

principal 1, mismo se aplica para Eclipse o IntelliJ es esta única? – virtualeyes

+0

¿Qué hace 'no-sbt-clasificadores'? –

+0

He estado usando retrieve-managed para que todo funcione. La última vez que intenté evitarlo, tuve problemas para que Idea viera las bibliotecas. Sin embargo, esa fue la Idea 10, tal vez se solucionó en 11 ... – Ivan

Cuestiones relacionadas