2016-04-29 19 views
8

Sto usando l'ultima IntelliJ IDEA (2016.1.1) - ma ho visto questo comportamento anche nelle versioni precedenti - sviluppo in Scala con l'ultimo plugin Scala (3.0.3).IntelliJ non può connettersi al proprio server di compilazione Scala

Quando provo a eseguire/eseguire il debug di un test o codice, IDEA inizierà a fare il progetto, ma rimarrà lì alcuni secondi mentre la barra di avanzamento "Make" non progredisce affatto.

Dopo 20-30 secondi di questo, il seguente messaggio appare nella scheda Messaggi:

Attenzione: Scala: Impossibile connettersi al server di compilazione a localhost/127.0.0.1: 59.656 Provando a compilare senza di essa

il porto mostrato lì, 59.656, è un porto io stesso hard-coded in %USER_PROFILE%\.IntelliJIdea2016.1\config\options\scala.xml, dopo che ho notato questo problema la prima volta sulla porta di default, in modo da cambiare la porta non ha aiutato ...

A questo punto, la barra leggerà "Lettura delle impostazioni di compilazione ..." per diverse decine di secondi prima che il codice venga effettivamente eseguito. È terribilmente preoccupante e non riesco a essere in grado di risolverlo definitivamente. Questo può facilmente richiedere fino a 3 minuti per eseguire un singolo test. Molto sconvolgente. Ho notato che questo problema si verificava in modo intermittente sulla mia macchina da lavoro (Win7).

Qualcuno ha qualche idea su come eseguire il debug/correggere questo problema?

Grazie

+1

Accade anche in Linux. –

+0

Ho anche riscontrato questo problema su Windows 7. Dopo aver eseguito l'aggiornamento a Windows 8.1 (e ora 10), è andato via (finora). –

+0

Accade anche su OSX. – richj

risposta

2

Non capisco pienamente questo ancora, tuttavia in Preferenze, Lingue & quadri> scalac Server ci sono alcune impostazioni che potrebbero aiutare: server di

  • Shutdown se è inattivo per <numero> minuti.
  • uso domestico progetto come directory di lavoro del server compilatore (compilazione del server verrà riavviato su ogni compilazione di un nuovo progetto)
  • JVM SDK è utilizzato per creare un'istanza di compilazione server ... (quando JVM SDK e modulo partita SDK).

C'è una piccola icona in basso a destra nella finestra IntelliJ che indica se il server di compilazione è in esecuzione e può essere utilizzato per fermarsi e avviarlo.

Il server si spegne se è inattivo. Normalmente dovrebbe avviarsi quando necessario, ma questo potrebbe non accadere se l'SDK JVM non corrisponde all'SDK del modulo. Aumentare il timeout di inattività dovrebbe aiutare a ridurre la frequenza del problema. La corrispondenza tra l'SDK JVM e l'SDK del modulo dovrebbe risolvere il problema, ma potrebbe non essere possibile se si dispone di più progetti che utilizzano SDK diversi.

L'utilizzo del progetto home come directory di lavoro del server del compilatore può essere d'aiuto se si passa frequentemente da un progetto all'altro.

Modifica

ho ancora questo problema con IntelliJ IDEA ultimo 2016/03/02 ma il solito metodo di un nuovo arresto e il riavvio non ha funzionato. Ho messo insieme alcune informazioni su come funziona il server di compilazione e mi sembra che IntelliJ stia cercando la porta sbagliata per il server di compilazione.Se forzo manualmente un make, posso vedere un server compilato in esecuzione, ma non è quello che sta cercando IntelliJ. Non ho ancora una soluzione, ma questa informazione potrebbe farci avvicinare a uno.

Ricerca dei file

Il primo passo sta lavorando dove IntelliJ salva la sua configurazione e file di log. Questa informazione è attualmente pubblicato qui: IntelliJ Directories

Sul mio Mac questo significa:

file di configurazione
  • : ~/Library/Preferences/IntelliJIdea2016.3/opzioni
  • file di log: ~/Library/Logs/IntelliJIdea2016.3

La compilazione Server

Il server di compilazione è un processo Java con una riga di comando molto lunga che finisce così:

org.jetbrains.jps.cmdline.BuildMain <host> <port> <compile-server-id> <compile-server-cache-directory> 

La configurazione opzioni sono memorizzate in ~/Library/Preferences/IntelliJIdea2016.3/opzioni/scala.xml

Alcuni di questi sono configurati in Preferenze -> Lingue & Frameworks -> Finestra di dialogo Server Compiler Scala, ma è possibile aggiungere altre impostazioni modificando il file. Il mio momento assomiglia a questo:

<application> 
    <component name="ScalaSettings"> 
    <option name="COMPILE_SERVER_PORT" value="59184" /> 
    <option name="COMPILE_SERVER_ID" value="93f4589e-4707-4e20-a05a-01869045e067" /> 
    <option name="COMPILE_SERVER_SDK" value="1.8" /> 
    <option name="COMPILE_SERVER_MAXIMUM_HEAP_SIZE" value="2048" /> 
    </component> 
</application> 

ho aggiunto l'opzione COMPILER_SERVER_PORT a mano, ma con questa versione di IntelliJ il server di compilazione che utilizza per singole compilation ha un porto e ID diverso. Sfortunatamente questo processo usa una porta diversa se cambio COMPILER_SERVER_PORT e riavvio IntelliJ quindi penso che queste siano due istanze separate.

Ho usato questo comando per trovare il processo del server di compilazione, dopo aver avviato manualmente una compilazione:

ps -ef | grep nailgun 

Questo comando trova le porte utilizzate da IntelliJ:

lsof -i | grep idea 

C'è anche un file di log qui:

~/Library/Logs/IntelliJIdea2016.3/idea.log 

che indica che qualcosa non è giusto:

2016-12-28 10:19:46,745 [ 50710] INFO - j.compiler.server.BuildManager - BUILDER_PROCESS [stdout]: Build process started. Classpath: /Users/richard/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/163.10154.41/IntelliJ IDEA.app/Contents/lib/jps-launcher.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/lib/tools.jar:/Users/richard/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/163.10154.41/IntelliJ IDEA.app/Contents/lib/optimizedFileManager.jar 
2016-12-28 10:59:43,958 [2447923] INFO - ij.compiler.impl.CompileDriver - COMPILATION STARTED (BUILD PROCESS) 
2016-12-28 10:59:43,960 [2447925] INFO - j.compiler.server.BuildManager - Using preloaded build process to compile /Users/richard/workspace-scala 
2016-12-28 10:59:44,181 [2448146] ERROR - .impl.MessageBusConnectionImpl - java.lang.NullPointerException 
java.lang.RuntimeException: java.lang.NullPointerException 
    at com.intellij.openapi.application.impl.LaterInvocator.invokeAndWait(LaterInvocator.java:189) 
    at com.intellij.openapi.application.impl.ApplicationImpl.invokeAndWait(ApplicationImpl.java:662) 
    at com.intellij.openapi.application.impl.ApplicationImpl.invokeAndWait(ApplicationImpl.java:667) 
    at org.jetbrains.plugins.scala.extensions.package$$anonfun$invokeAndWait$1.apply$mcV$sp(package.scala:567) 
    at org.jetbrains.plugins.scala.extensions.package$.preservingControlFlow(package.scala:577) 
    at org.jetbrains.plugins.scala.extensions.package$.invokeAndWait(package.scala:566) 
    at org.jetbrains.plugins.scala.compiler.ServerMediator$$anon$1.buildStarted(ServerMediator.scala:42) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:117) 
    at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:381) 
    at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:368) 
    at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:347) 
    at com.intellij.util.messages.impl.MessageBusImpl.access$200(MessageBusImpl.java:42) 
    at com.intellij.util.messages.impl.MessageBusImpl$2.invoke(MessageBusImpl.java:230) 
    at com.sun.proxy.$Proxy117.buildStarted(Unknown Source) 
    at com.intellij.compiler.server.BuildManager$NotifyingMessageHandler.buildStarted(BuildManager.java:1435) 
    at com.intellij.compiler.server.DelegatingMessageHandler.buildStarted(DelegatingMessageHandler.java:18) 
    at com.intellij.compiler.server.DelegatingMessageHandler.buildStarted(DelegatingMessageHandler.java:18) 
    at com.intellij.compiler.server.BuildMessageDispatcher.sendBuildParameters(BuildMessageDispatcher.java:115) 
    at com.intellij.compiler.server.BuildManager.a(BuildManager.java:724) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:210) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException 
    at org.jetbrains.plugins.scala.compiler.CompileServerLauncher$$anonfun$15.apply(CompileServerLauncher.scala:282) 
    at org.jetbrains.plugins.scala.compiler.CompileServerLauncher$$anonfun$15.apply(CompileServerLauncher.scala:282) 
    at scala.collection.TraversableLike$$anonfun$filterImpl$1.apply(TraversableLike.scala:259) 
    at scala.collection.immutable.Set$Set3.foreach(Set.scala:145) 
    at scala.collection.TraversableLike$class.filterImpl(TraversableLike.scala:258) 
    at scala.collection.TraversableLike$class.filter(TraversableLike.scala:270) 
    at scala.collection.AbstractTraversable.filter(Traversable.scala:104) 
    at org.jetbrains.plugins.scala.compiler.CompileServerLauncher$.org$jetbrains$plugins$scala$compiler$CompileServerLauncher$$jdkChangeRequired(CompileServerLauncher.scala:282) 
    at org.jetbrains.plugins.scala.compiler.CompileServerLauncher.start(CompileServerLauncher.scala:56) 
    at org.jetbrains.plugins.scala.compiler.CompileServerLauncher.tryToStart(CompileServerLauncher.scala:41) 
    at org.jetbrains.plugins.scala.compiler.ServerMediator$$anon$1$$anonfun$buildStarted$2.apply$mcV$sp(ServerMediator.scala:43) 
    at org.jetbrains.plugins.scala.extensions.package$$anonfun$invokeAndWait$1$$anon$16.run(package.scala:569) 
    at com.intellij.openapi.application.TransactionGuardImpl$6.run(TransactionGuardImpl.java:318) 
    at com.intellij.openapi.application.impl.LaterInvocator$1.run(LaterInvocator.java:166) 
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.a(LaterInvocator.java:417) 
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:401) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
    at com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:843) 
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:679) 
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:391) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
2016-12-28 10:59:44,183 [2448148] ERROR - .impl.MessageBusConnectionImpl - IntelliJ IDEA 2016.3.2 Build #IU-163.10154.41 
2016-12-28 10:59:44,183 [2448148] ERROR - .impl.MessageBusConnectionImpl - JDK: 1.8.0_112-release 
2016-12-28 10:59:44,183 [2448148] ERROR - .impl.MessageBusConnectionImpl - VM: OpenJDK 64-Bit Server VM 
2016-12-28 10:59:44,183 [2448148] ERROR - .impl.MessageBusConnectionImpl - Vendor: JetBrains s.r.o 
2016-12-28 10:59:44,183 [2448148] ERROR - .impl.MessageBusConnectionImpl - OS: Mac OS X 
2016-12-28 10:59:44,183 [2448148] ERROR - .impl.MessageBusConnectionImpl - Last Action: CompileDirty 
2016-12-28 10:59:48,828 [2452793] INFO - lij.compiler.impl.CompilerUtil -  COMPILATION FINISHED (BUILD PROCESS); Errors: 0; warnings: 1 took 4878 ms: 0 min 4sec 

CompileServerLauncher.scala indica che questo è qualcosa a che fare con il non essere in grado di trovare un JDK 8 da usare, anche se non riesce a trovare uno che sembra che dovrebbe fallire con un messaggio di errore, non un NullPointerException.

+0

Grazie per l'analisi, sto riscontrando lo stesso problema (con lo stesso errore nei log) ed è difficile trovare molte informazioni a riguardo. Hai avuto più fortuna nel capire cosa c'è che non va? –

+0

Non ho funzionato, ma ho aggiornato a IntelliJ 2016.3.5 e dopo un riavvio il server di compilazione Scala è di nuovo in esecuzione. Ho anche aggiornato a JDK 1.8.0_112 e Scala 2.12.1. Forse uno o più di questi aggiornamenti hanno aiutato. Vale anche la pena controllare che ognuno dei tuoi progetti utilizzi JDK 8 e/o Scala 2.12. Ho un progetto per le impostazioni di configurazione che ho configurato anche con gli SDK Java e Scala. – richj

+0

Ho il mio server compilatore Scala configurato con 1 GB di RAM di heap e il compilatore Java con 2 GB. Mi chiedevo se il server di compilazione avesse problemi ad allocare il suo blocco di RAM. La macchina ha 16 GB e di solito c'è un po 'di ricambio anche con diversi processi Java pesanti in esecuzione. Non penso che sia così, ma dal momento che la macchina impiega molto tempo tra un riavvio e l'altro forse non c'è un blocco abbastanza grande di RAM, anche se c'è abbastanza spazio libero in totale? – richj

0

Ho avuto lo stesso problema. Sto usando IntelliJ 2017.3. Gioca al framework 2.6. Stb 0.13.15. risolto con l'aggiunta di -server -Xss1m nei parametri del server JVM Scala di compilazione: enter image description here

0

Ho avuto lo stesso problema, ed è stato causato da file di impostazioni in conflitto tra il repository impostazioni e le preferenze locali.Le impostazioni del server di compilazione sono memorizzate in un file chiamato scala.xml nella directory delle preferenze IDEA.

Se si utilizza "le impostazioni di sincronizzazione", vale a dire un archivio online per sincronizzare le impostazioni IDEA, assicurarsi che hai solo una scala.xml file di configurazione. Vai al tuo Library/Preferences/<IDEA-Dir>/ e rimuovi il file dalle directory options e settingsRepository. Questo si ripristina su "impostazioni di fabbrica".

Riavviare IntelliJ, impostare di nuovo il server di compilazione. Ora dovrebbe scrivere solo un file, nella directory settingsRepository, con un nuovo ID e l'allocazione della porta per il server di compilazione.

Questo lo ha risolto per me.