Как заставить IntelliJ IDEA использовать javac для Java и scalac для Scala?

В моем проекте IDEA модуль Scala зависит от модуля Java. Когда я пытаюсь скомпилировать модуль Scala, запускается только скаляр. Он компилирует как Java, так и Scala источники.

Я бы хотел, чтобы scalac компилировал только модуль Scala, потому что javac намного быстрее для источников Java (и мой Java-проект является большим). Как заставить IDEA использовать разные компиляторы для разных модулей?


Мое обходное решение - (для каждой зависимости от модуля Java):

  • Удалить зависимость модуля в конфигурации проекта
  • Добавить зависимость от соответствующего каталога вывода компиляции "MyJavaModule/target/classes"

Очевидно, я не доволен этим, потому что каждый раз, когда я reimport проект Maven, мне нужно повторить все это, чтобы иметь быструю компиляцию. Я надеюсь, что кто-то знает лучший способ.


Уточнение: Я хотел бы подчеркнуть, что такие инструменты, как SBT или Maven, не решают мою проблему. Речь идет не только о компиляции. Это о компиляции в IDEA, необходимой для таких вещей, как Scala Рабочий лист или запуск модульных тестов из IDEA. Моя цель состоит в том, чтобы иметь полный спектр тонкостей IDEA (подсветка синтаксиса, интеллектуальное автоматическое завершение, авто-импорт и т.д.) Со скоростью компиляции SBT. Теперь я должен либо переносить длительные сроки компиляции (из-за зависимостей с моим модулем Java), либо использовать REPL и GOOP с боковыми костями. SBI.

Ответ 1

Рэндалл Шульц задал правильный вопрос в комментарии: " Почему имеет значение, какой инструмент выполняет компиляцию? До сих пор я считал, что IDEA необходимо скомпилировать все классы, если вы хотите использовать его приятные функции (например, IDEA Scala Console или запуск тестов изнутри). Я ошибался.

Фактически, IDEA будет собирать классы, скомпилированные любым другим инструментом (например, большой SBT). Вам просто нужно убедиться, что все классы обновлены до использования любых полезных функций IDEA. Лучший способ сделать это:

  • запускает непрерывную инкрементную компиляцию в фоновом режиме (для например, выпуская "~ compile" в SBT)
  • удалите "make" шаг в IDEA конфигурации запуска

Это все! Затем вы можете использовать все классные функции IDEA (не только подсветку синтаксиса и завершение кода, но и все авто-импорт в консоли Scala, быстро выполняемые выбранные модульные тесты) без переключения между разными окнами. Это рабочий процесс, который я пропустил до сих пор! Спасибо всем за комментарии к этой проблеме.

Ответ 2

Вы должны посмотреть на использование набора управления зависимостями, такого как Apache Ivy или Apache Maven. Затем поставьте свой источник Java в отдельный артефакт и запустите проект Scala в зависимости от артефакта проекта Java.

Если вы идете по маршруту Maven, есть плагин Scala.

Ответ 3

Вероятно, самый простой способ скомпилировать Scala и файлы Java - это SBT - Simple Build Tool. Просто создайте проект (+ добавить зависимости и т.д.) И скомпилируйте его. Scala + Компиляция Java работает из коробки. Я переключился на SBT из Maven.

Если у вас есть сложный POM или у вас есть другая причина не переходить на SBT, вы можете попробовать настроить POM. Просто добавление (и, возможно, настройка) плагина Scala должно быть достаточно. Я надеюсь, что это не нарушит поддержку Java.