IntelliJ无法连接到自己的Scala编译服务器

时间:2016-04-29 08:59:50

标签: scala intellij-idea intellij-scala

我正在使用最新的IntelliJ IDEA(2016.1.1) - ,但我在之前的版本中也看到了这种行为 - 使用最新的Scala插件(3.0.3)在Scala中进行开发。

当我尝试运行/调试测试或代码时,IDEA将开始创建项目,但是在" Make"进度条根本没有进展。

20-30秒后,消息选项卡中会显示以下消息:

  

警告:scala:无法连接到编译服务器   localhost / 127.0.0.1:59656尝试在没有它的情况下编译

在那里显示的端口59656是我在%USER_PROFILE%\.IntelliJIdea2016.1\config\options\scala.xml中自我编码的端口,在我第一次在默认端口上发现此问题之后,所以更改端口没有帮助...

此时,栏会读取"阅读编辑设置......"在代码实际运行之前的几十秒。这是非常麻烦,我似乎无法明确地解决它。运行单个测试最多可能需要3分钟。非常扰乱。我注意到我的工作机器(Win7)上间歇性地发生了这个问题。

任何人都知道如何调试/修复此问题?

由于

3 个答案:

答案 0 :(得分:2)

我还没有完全理解这一点,但是在偏好,语言和框架> Scalac Server有一些可能有用的设置:

  • 关闭服务器,如果它是空闲的< number>分钟。
  • 使用project home作为编译器服务器工作目录(将在每个新项目的编译时重新启动编译服务器)
  • JVM SDK用于实例化编译服务器...(当JVM SDK和模块SDK匹配时)。

IntelliJ窗口右下方有一个小图标,指示编译服务器是否正在运行,是否可用于停止和启动它。

如果服务器空闲,服务器将关闭。它通常应该在需要时启动,但如果JVM SDK与模块SDK不匹配,则可能不会发生这种情况。增加空闲超时应有助于降低问题的频率。将JVM SDK与模块SDK相匹配应该可以解决问题,但如果您有多个使用不同SDK的项目,则可能无法解决问题。

如果经常在项目之间切换,使用项目主目录作为编译器服务器工作目录可能会有所帮助。

修改

我再次使用IntelliJ IDEA Ultimate 2016.3.2解决了这个问题,但干净关机和重启的常用方法并没有奏效。我已经将有关编译服务器如何工作的一些信息拼凑在一起,在我看来,IntelliJ正在查找编译服务器的错误端口。如果我手动强制make,那么我可以看到编译服务器正在运行,但它不是IntelliJ正在寻找的那个。我仍然没有解决方案,但这些信息可能会让我们更接近一个。

查找文件

第一步是确定IntelliJ存储其配置和日志文件的位置。此信息目前在此处发布:IntelliJ Directories

在我的Mac上,这意味着:

  • 配置文件:〜/ Library / Preferences / IntelliJIdea2016.3 / options
  • 日志文件:〜/ Library / Logs / IntelliJIdea2016.3

编译服务器

编译服务器是一个Java进程,其命令行很长,结尾如下:

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

配置选项存储在〜/ Library / Preferences / IntelliJIdea2016.3 / options / scala.xml

其中一些是在首选项中配置的 - &gt;语言与框架 - &gt; Scala Compiler Server对话框,但可以通过编辑文件添加其他设置。我的目前看起来像这样:

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

我手动添加了COMPILER_SERVER_PORT选项,但是使用此版本的IntelliJ,它用于单个编译的编译服务器具有不同的端口和ID。不幸的是,如果我更改COMPILER_SERVER_PORT并重新启动IntelliJ,此过程使用不同的端口,所以我认为这是两个独立的实例。

在手动启动编译后,我使用此命令查找编译服务器进程:

ps -ef | grep nailgun

此命令查找IntelliJ使用的端口:

lsof -i | grep idea

此处还有一个日志文件:

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

表示某些事情不太正确:

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表示这与无法找到要使用的JDK 8有关,尽管如果它找不到它,它看起来应该失败并显示错误消息,而不是空指针异常。

答案 1 :(得分:2)

我有同样的问题。 我使用IntelliJ 2017.3。玩框架2.6。 Stb 0.13.15。 解决了在scala编译服务器JVM参数中添加-server -Xss1m: enter image description here

答案 2 :(得分:0)

我遇到了同样的问题,这是由设置存储库和本地首选项之间的设置文件冲突引起的。您的编译服务器设置存储在IDEA首选项目录中名为scala.xml的文件中。

如果您使用“设置同步”,即在线存储库来同步您的IDEA设置,请确保您只有一个 scala.xml配置文件。转到Library/Preferences/<IDEA-Dir>/,然后从optionssettingsRepository目录中删除该文件。这将重置为“出厂设置”。

重新启动IntelliJ,再次设置编译服务器。它现在应该只为settingsRepository目录写一个文件,为编译服务器分配一个新的ID和端口。

这为我解决了。