web-dev-qa-db-ja.com

Intellijのコンパイルエラー:「既に定義されています」

scalaコマンドラインからSBTを使用する場合にコンパイル、実行、テストを正常に行うプロジェクトがあります。ただし、intellijでプロジェクトをビルドすると、プロジェクト内のすべてのクラスにこのエラーが発生しますイベントログで、ビルドが失敗する原因:

SendCommandToService is already defined as case class SendCommandToService
case class SendCommandToService(service: String, commandName: String, keys: Array[String], values: Array[String])
       ^
45
Nick

クラスパスに同じパッケージとクラス名を持つ2つのコンパイルされたクラスがあることを意味します。 sbtによってコンパイルされたもの、IntelliJによってコンパイルされたもの。

次のいずれかが問題を解決できるはずです。

  1. 直接インポートするのではなく、 sbt-idea でIntelliJ .imlファイルを生成してみてください。
  2. [ビルド]-> [IntelliJで再ビルド]をクリックする前にsbt clean
  3. intelliJで再構築する場合、sbtが実行されていないことを確認してください
31
Max

私にとっては、myproject/srcmyproject/src/main/scalaの両方がソースとしてマークされているためです。したがって、上記のエラーが原因で、intellijはmyproject/src/main/scalaのビルドに失敗しました。 myproject/srcからソースのマークを外す(intellij、ファイル->プロジェクト構造、myprojectモジュールを選択、ソースタブでsrcフォルダーを選択、「コンテンツルートの追加」ペインでソースから削除)で問題が解決しました。お役に立てれば。

100
jiangok

私は同じ問題を抱えており、@ Maxは正しい、コンパイルされたクラスとの競合がありますが、提供された解決策はうまくいきませんでした。 Intellij IDEA 14 + IDEAプラグインのバグの回避策としてsbt-ideaを使用してscalaプロジェクト構造を生成していたことが判明しました SBTインポートについては、これを書いている時点ではまだ修正されていません。

それを修正するには、 sbt-idea bug のために、モジュール設定のsrc_managed/main/controllerと競合していたsrc_managed/mainを削除する必要がありました。したがって、モジュールのソースフォルダーを再確認し、既にソースとして宣言されている親フォルダーと競合するサブフォルダーがないことを確認してください。

5
Baztoune

「設定->ビルド、実行、展開-> Scalaコンパイラ->コンパイル順序」を「混合」から「Java次にScala」に変更する必要があります。以前にプロジェクトをコンパイルした場合は、最初に「sbt clean」を実行する必要があります。

2
425940330

私は、Idea内でもそうでない場合でも、同じような問題を繰り返していました。プレーンSBTです。

CVSはいくつかの*。scalaファイルのコピーをサブディレクトリCVS/Baseに保存し、SBTは明らかにコンパイルしようとしていることが判明しました。 CVSサブディレクトリを削除すると、問題はなくなりました。

2
user3603546

私の場合、問題はprotobuf Idea plugin

  1. アイデアprotbufプラグインを削除します。
  2. アイデアを閉じる
  3. アイデアに関連するすべてのフォルダー(.ideaおよび.idea_modules)を削除します
  4. アイデアを開き、プロジェクトを再度インポートします。
0
angelcervera

sbt compileの後、コンパイルにこれらのファイルが必要だったため、フォルダーをGenerated Sources Rootとしてマークする必要がありました。

0
Reeebuuk