13

私は最新の IntelliJ IDEA (2016.1.1) を使用していますが、以前のバージョンでもこの動作を見てきました- 最新の Scala プラグイン (3.0.3) を使用して Scala で開発しています。

テストまたはコードを実行/デバッグしようとすると、IDEA はプロジェクトの作成を開始しますが、「作成」進行状況バーがまったく進行しない間、そこに数秒間留まります。

この 20 ~ 30 秒後、次のメッセージが [メッセージ] タブに表示されます。

警告:scala: localhost/127.0.0.1:59656 でコンパイル サーバーに接続できません

%USER_PROFILE%\.IntelliJIdea2016.1\config\options\scala.xmlそこに示されているポート 59656 は、デフォルトのポートで初めてこの問題に気付いた後、自分でハードコーディングしたポートであるため、ポートを変更しても解決しませんでした...

この時点で、コードが実際に実行されるまでの数十秒間、バーに「コンパイル設定を読み込んでいます...」と表示されます。それはひどく面倒で、私はそれを決定的に修正することができないようです. これには、1 つのテストを実行するのに最大 3 分かかることがあります。非常に邪魔です。この問題が私の作業マシン (Win7) で断続的に発生していることに気付きました。

この問題をデバッグ/修正する方法を知っている人はいますか?

ありがとう

4

4 に答える 4

3

これについてはまだ完全には理解できていませんが、Preferences, Languages & Frameworks > Scalac Server の下に役立つ設定がいくつかあります。

  • <number> 分間アイドル状態の場合、サーバーをシャットダウンします。
  • プロジェクト ホームをコンパイラ サーバーの作業ディレクトリとして使用します (新しいプロジェクトをコンパイルするたびに、コンパイル サーバーが再起動されます)。
  • JVM SDK は、コンパイル サーバーのインスタンス化に使用されます ... (JVM SDK とモジュール SDK が一致する場合)。

IntelliJ ウィンドウの右下に小さなアイコンがあり、コンパイル サーバーが実行されているかどうかを示し、それを停止および開始するために使用できます。

アイドル状態の場合、サーバーはシャットダウンします。通常は必要に応じて起動するはずですが、JVM SDK がモジュール SDK と一致しない場合は起動しない可能性があります。アイドル タイムアウトを増やすと、問題の頻度を減らすのに役立ちます。JVM SDK を Module SDK に一致させることで問題が解決するはずですが、異なる SDK を使用する複数のプロジェクトがある場合は解決できない可能性があります。

プロジェクトのホームをコンパイラ サーバーの作業ディレクトリとして使用すると、プロジェクトを頻繁に切り替える場合に役立つ場合があります。

編集

IntelliJ IDEA Ultimate 2016.3.2 でこの問題が再び発生しましたが、クリーン シャットダウンと再起動の通常の方法は機能しませんでした。コンパイル サーバーがどのように機能するかについていくつかの情報をまとめましたが、IntelliJ がコンパイル サーバーの間違ったポートを探しているようです。手動で make を強制すると、コンパイル サーバーが実行されていることがわかりますが、それは IntelliJ が探しているものではありません。私はまだ解決策を持っていませんが、この情報は私たちを解決策に近づけるかもしれません.

ファイルの検索

最初のステップは、IntelliJ が構成ファイルとログ ファイルを格納する場所を特定することです。この情報は現在ここで公開されています: IntelliJ ディレクトリ

私の 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 に保存されます

これらの一部は [設定] -> [言語とフレームワーク] -> [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 を再起動すると、このプロセスは別のポートを使用するため、これらは 2 つの別個のインスタンスであると考えられます。

手動でコンパイルを開始した後、このコマンドを使用してコンパイル サーバー プロセスを見つけました。

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 ではなくエラー メッセージで失敗するはずです。

于 2016-06-03T10:47:38.300 に答える