2

Scala プラグインで Intellij IDEA を使用する。

Build->を実行Rebuild Projectすると、次の警告が表示されます。

Output path ProjectRootFolder\project\target\idea-test-classes intersects with a source root. Only files that were created by build will be cleaned.
Output path ProjectRootFolder\project\target\idea-classes intersects with a source root. Only files that were created by build will be cleaned.

プロジェクトは、SBT gen-idea プラグインで生成されました。

Project Structure警告に記載されている 2 つの出力パスは、 -> Modules-> ProjectName-build-> Paths- >の下のプロジェクトのビルド モジュールの出力パスとテスト出力パスとして設定されますUse module compile output path

ProjectNameモジュールとモジュールの両方の [ソース] タブを見ると、とマークされているProjectName-build場所がないことがわかりました。ProjectRootFolder\project\targetSource

4

2 に答える 2

1

同じ警告が表示されますが、これまでのところ問題は発生していません。

このコードから判断すると、IDE によって生成されたファイルのみを削除するだけのように見えます。それ以外の場合は、ターゲット ディレクトリ内のすべてを削除する必要があります。そこにソースファイルがあるかどうかを確認することで、彼らは安全に遊んでいます。

// check that output and source roots are not overlapping
final List<File> filesToDelete = new ArrayList<File>();
for (Map.Entry<File, Collection<BuildTarget<?>>> entry : rootsToDelete.entrySet()) {
  context.checkCanceled();
  boolean okToDelete = true;
  final File outputRoot = entry.getKey();
  if (JpsPathUtil.isUnder(allSourceRoots, outputRoot)) {
    okToDelete = false;
  }
  else {
    final Set<File> _outRoot = Collections.singleton(outputRoot);
    for (File srcRoot : allSourceRoots) {
      if (JpsPathUtil.isUnder(_outRoot, srcRoot)) {
        okToDelete = false;
        break;
      }
    }
  }
  if (okToDelete) {
    // do not delete output root itself to avoid lots of unnecessary "roots_changed" events in IDEA
    final File[] children = outputRoot.listFiles();
    if (children != null) {
      filesToDelete.addAll(Arrays.asList(children));
    }
    else if (outputRoot.isFile()) {
      filesToDelete.add(outputRoot);
    }
  }
  else {
    context.processMessage(new CompilerMessage(
      "", BuildMessage.Kind.WARNING, "Output path " + outputRoot.getPath() + " intersects with a source root. Only files that were created by build will be cleaned.")
    );
    // clean only those files we are aware of
    for (BuildTarget<?> target : entry.getValue()) {
      clearOutputFiles(context, target);
    }
  }
}
于 2014-03-01T22:57:40.730 に答える