2013-04-01 13 views
10

Nel mio nuovo Mac OSX 10.8.3, installo Scala 2.10.0, gioca 2.1.0 e IntelliJ12, e creare un progetto di gioco come segue:in esecuzione il primo esempio di play framework in IntelliJ su un Mac OSX

#install brew 
> ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" 
> brew --version 
0.9.4 

# update brew database 
> cd $(brew --prefix) 
> brew update 
> cd $(brew --prefix) && git pull --rebase 

# get scala 2.10.0 
> brew versions scala 
2.10.1 git checkout 79dc6f1 Library/Formula/scala.rb 
2.10.0 git checkout 8ca07aa Library/Formula/scala.rb 
2.9.2 git checkout 8896425 Library/Formula/scala.rb 
... 

> git checkout 8ca07aa Library/Formula/scala.rb # 2.10.0 
> brew install scala 
> scala -version 
Scala code runner version 2.10.0 -- Copyright 2002-2012, LAMP/EPFL 


# install play 2.1.0 
> brew versions play 
2.1.0 git checkout 6a70797 Library/Formula/play.rb 
... 

> brew install play 
> play -version 
play! 2.1.0 (using Java 1.6.0_43 and Scala 2.10.0), http://www.playframework.org 

e creo una domanda di gioco:

> cd ~/ 
> play new myapp 
name: myapp 
Create a simple Scala application 

# generate IntelliJ project: 
> cd myapp 
> play 
> idea 
[info] Created /Users/david/myapp/.idea_modules/myapp.iml 
[info] Created /Users/david/myapp/.idea_modules/myapp-build.iml 

e aprire il progetto in IntelliJ:

# Install IntelliJ 12 Ultimate Edition 
Download it from http://www.jetbrains.com/idea/ 
12.0.4, Build #IU-123.169 
Build on February 13, 2013 

# install scala plugin in IntelliJ 
run IntelliJ, 
Preferences -> plugins -> Browse from repositories -> add scala. 
current version: 0.7.134 

# open myapp project in IntelliJ 
File -> Open Project, chose the directory /Users/david/myapp 

Poi, quando si tenta di eseguire il test di unità:

Project -> myapp -> test -> ApplicationSpec -> (right click) -> Run 

ottengo questo errore:

scala: Сompiler library for module bigbrother not found: Right(Project)/Right(scala-2.10.0) 

In realtà, ci sono diversi errori:

in File -> Project Structure -> Modules, there are two modules: 
-myapp 
-mypp-build 

File -> Project Structure -> Modules -> myapp -> Scala 
    Compiler library: scala-2.10.0 [not found] 
    <<< ERROR 

File -> Project Structure -> Modules -> myapp-build -> Dependencies: 
    scala-2.9.2 
    <<< ERROR 

Se ho corretto la prima errore come segue,

File -> Project Structure -> Modules -> myapp -> Scala -> Compiler library 
and from the dropdown list I select the second valid option “scala-2.10.0 (version 2.10.0)”. 

Quindi, rieseguire il test, produce l'errore:

scala: Output path /Users/david/bigbrother/project/target/scala_2.9.2 is shared between: Module 'bigbrother-build' production, Module 'bigbrother-build' tests 
Currently external Scala compiler prohibits output path sharing. 
Either disable the external build mode or configure separate output paths. 
TIP: you can use Project Artifacts to combine compiled classes. 

Che cosa devo fare per farlo funzionare?


Update: soluzione basata sulle risposte da Marius e alexwriteshere

generare progetto IntelliJ con

> cd myapp 
> play 
> idea no-sbt-build-module 

(invece di 'idea')

poi, Impostazioni progetto -> Librerie Seleziona "Scala 2.9.2" e fai clic su "-" per visualizzare spostalo.

quindi, Impostazioni progetto -> Modulo -> my_app -> Scala -> Scala-compiler in questo elenco a discesa, è selezionato "Scala 2.10.0" scritto in rosso. sposta in cima all'elenco e seleziona "Scala 2.10.0 (versione 2.10.0)" scritto in nero/grigio.


Nota

a volte (non so perché) la scelta "Scala 2.10.0 (versione 2.10.0)" scritto in nero/grigio non è disponibile nell'elenco a discesa. una soluzione che funziona per renderla disponibile è la seguente: Impostazioni progetto -> Librerie globali -> + -> Java selezionare questi file scala-compiler.jar, scala-library.jar e scala-reflect.jar da questa directory: /usr/local/Cellar/scala/2.10.0/libexec/lib/ selezionare Ok. Assegnare il nome "my scala 2.10.0 bundle".

quindi, vai di nuovo su Impostazioni progetto -> Modulo -> my_app -> Scala -> Scala-compiler ora hai entrambi, quello che hai appena creato "my scala 2.10.0 bundle", e quello standard: "Scala 2.10.0 (versione 2.10.0)" scritto in nero/grigio. seleziona quello standard ed elimina la biblioteca globale che hai creato.

Non so perché questo accade, e davvero non voglio passare più tempo a scoprirlo. per il momento, questa soluzione funziona per me. ma sentiti libero di aggiungere un commento se lo scopri.

+0

Fantastico! IDEA segna ancora alcune affermazioni come sbagliate per me, anche se tutto si compila. Ma almeno non tutto è rosso. – Mortimer

+0

Ho reimportato il progetto da Maven (cosa ha funzionato per me) – Jas

risposta

10

Questi problemi possono essere risolti generando progetto idea con:

$ play # start play from command line 
[your-play-project] $ idea no-sbt-build-module 

Questo consentirà meccanismo edificio predefinito di IntelliJ per Scala, che non causerà questi problemi.

+0

ha funzionato benissimo per me! Come nota a margine, stavo usando 'sbt' e' play' in modo intercambiabile alla riga di comando. Dopo aver eseguito ciò ho avuto problemi con 'sbt' (probabilmente previsto), quindi assicurati di continuare a usare' play' dopo aver apportato questa modifica. –

8

Ecco cosa mi ha aiutato in passato con gli stessi errori:

  1. Rimuovere eventuali Scala 2.9.2 dipendenze
  2. Vai a Project Structure -> Global libraries. Creane uno nuovo, chiama, per esempio, scala-bundle. Aggiungi scala-compiler.jar, scala-library.jar, scala-reflect.jar per 2.10.
  3. Infine, andare a Project Structure -> Modules -> myapp -> Scala e selezionare scala-bundle.

Per errori di condivisione del modulo, andare a Project Structure -> Modules -> <each module> -> Paths e modificare i percorsi in modo che non siano gli stessi.

+0

ho fatto come ha detto Marius (play idea no-sbt-build-module), più le dipendenze di scala 2.9.2 rimosse, sono aggiornate con il modulo con la scala 2.10 .0 che intellij ha trovato (invece del non-trovato generato dall'idea di gioco). segnerei entrambe le domande come risposte, ma StackOverflow non lo consente. –