2016-04-29 39 views
8

我正在使用最新的IntelliJ IDEA(2016.1.1) - ,但我在以前的版本中也看到过这种行为 - 在Scala中使用最新的Scala插件(3.0.3 )。IntelliJ无法连接到它自己的Scala编译服务器

当我尝试运行/调试测试或代码时,IDEA将开始制作项目,但随后“制作”进度栏根本没有进展,但会停留在那里几秒钟。

的这20-30秒后,下面的消息出现在邮件选项卡:

警告:斯卡拉:无法连接在本地主机 /127.0.0.1编译服务器:59656尝试没有它编译

有显示,59656的端口,是我硬编码自己在%USER_PROFILE%\.IntelliJIdea2016.1\config\options\scala.xml后,我第一次在默认端口上注意到了这个问题,所以在更改端口没有帮助的端口...

此时,在实际运行代码之前,条会读取“Reading compilation settings ...”几十秒。这是非常困扰,我似乎无法明确地修复它。这很容易花费3分钟来运行单个测试。非常扰乱。我注意到这个问题在我的工作机器(Win7)上间歇性地发生。

任何人有任何想法如何调试/解决这个问题?

感谢

+1

也发生在Linux中。 –

+0

我在Windows 7上也遇到过这个问题。升级到Windows 8.1(现在是10)之后,它消失了(到目前为止)。 –

+0

也发生在OSX上。 – richj

回答

2

我不完全理解这个呢,然而在首选项,语言&框架> Scalac服务器也有一些设置,可以帮助:

  • 关闭服务器,如果是闲置<号码>分钟。
  • 利用项目作为家庭服务器编译工作目录
  • JVM SDK用于实例编译服务器...(编译服务器将在一个新的项目的每个编译重新启动)(当JVM SDK和模块SDK匹配)。

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

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

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

编辑

我用的IntelliJ IDEA终极2016年3月2日,但干净关闭的常用方法,并重新启动没有工作再有这样的问题。我编写了关于编译服务器如何工作的一些信息,在我看来,IntelliJ正在寻找编译服务器的错误端口。如果我手动强制make,那么我可以看到一个编译服务器正在运行,但它不是IntelliJ正在寻找的那个。我仍然没有解决方案,但这些信息可能会让我们更接近一个。

查找文件

的第一步是制定出其中的IntelliJ存储它的配置和日志文件。此信息目前公布在这里:IntelliJ Directories

我的Mac上,这意味着:

  • 配置文件:〜/库/首选项/ IntelliJIdea2016.3 /选项
  • 日志文件:〜/图书馆/日志/ IntelliJIdea2016.3

编译服务器

编译服务器是一个很长的命令行Java进程,像这样结束:

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

选项都存储在配置〜/库/首选项/ IntelliJIdea2016.3 /选项/ scala.xml

有些在首选项 - >语言&框架 - > Scala编译器服务器对话框中配置,但可以通过编辑文件添加其他设置。目前矿看起来像这样:

<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使用,但如果它不能找到一个看起来像它应该有一个错误信息,而不是一个NullPointerException异常失败。

+0

感谢您研究这个问题,我遇到了同样的问题(在日志中出现同样的错误),很难找到关于它的很多信息。你有没有更多的运气来弄清楚什么是错的? –

+0

我没有解决,但我升级到IntelliJ 2016.3.5,重新启动后,Scala编译服务器再次运行。我也升级到了JDK 1.8.0_112和Scala 2.12.1。也许一个或多个升级有帮助。同样值得检查的是,您的每个项目都使用JDK 8和/或Scala 2.12。我有一个配置设置项目,我也使用Java和Scala SDK进行了配置。 – richj

+0

我的Scala编译器服务器配置了1GB的堆内存和2GB的Java编译器。我想知道编译服务器是否在分配其内存块时遇到困难。该机器有16GB,即使有几个高级Java进程在运行,通常也有一些备用。我不认为是这样,但是由于机器在重启之间需要很长时间,所以即使总共有足够的可用空间,也许没有足够大的内存块。 – richj

0

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

0

我有同样的问题,它是由相互冲突的设置存储库和本地之间的偏好设置文件导致的。您的编译服务器设置存储在IDEA首选项目录中的名为scala.xml的文件中。

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

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

这为我修好了。