Классы Intellij IDEA Java не компилируются автоматически при сохранении
вчера я переключился на Intellij из Eclipse.
Я также использую jRebel с Websphere Server 7.
все, теперь, кажется, работает довольно хорошо, за исключением того, что когда я изменить файл Java, и нажмите Сохранить, Intellij не повторно скомпилируйте файл, чтобы jRebel взял его.
затмения "Автоматически Построить " функция решила эту проблему.
В Intellij, Я должен ударить CTRL + SHIFT + 9 чтобы повторно скомпилировать соответствующий класс для jRebel, чтобы забрать его. Если изменения сделаны через два файла, Я чтобы сделать это на каждом и один из их и поскольку Intellij использует механизм save all, его довольно сложно узнать, что перекомпилировать вручную,что я тоже не очень заинтересован в этом.
разве нет способа сделать Intellij сделай это сам?
15 ответов:
обновлено
Для IDEA 12 + releases мы можем автоматически создавать отредактированные источники, если мы используем параметр внешнего компилятора. Единственное, что нужно, это проверить опцию "построить проект автоматически", расположенную в настройках компилятора. Кроме того, если вы хотите выполнить горячее развертывание, пока приложение работает или если вы используете Spring boot devtools, вы должны включитьcompiler.automake.allow.when.app.running
из реестра. Это автоматически скомпилирует ваш изменения.используя ctrl+shift+A (или ⌘+shift+A на mac) введите
Registry
Как только окна реестра открыты, найдите и включитеcompiler.automake.allow.when.app.running
см. здесь:
Для версий старше 12 вы можете использовать плагин EclipseMode, чтобы заставить IDEA автоматически компилировать сохраненные файлы. Видеть: https://www.jetbrains.com/help/idea/2016.3/eclipse.html для получения дополнительных советов при миграции из Eclipse.
пожалуйста, выполните оба шага:
1-включить автоматическое создание из компилятора
- нажмите: ctrl + shift + A (Для Mac ⌘ + shift + A)
- тип:
make project automatically
- нажмите: введите
- включить
Make Project automatically
feature2-включить Automake, когда приложение работает
- нажмите: ctrl + shift + A (Для Mac ⌘ + shift + A)
- тип:
Registry
- найти ключ
compiler.automake.allow.when.app.running
и включить или установите флажок рядом сПримечание: перезагрузите приложение сейчас:)
Примечание: это также должно позволить перезагрузку в реальном времени с пружинной загрузкой инструменты разработчика.
предупреждение
Режим Затмения плагин устарел и не совместим с недавней идеей 12+ сборки. Если вы установите его, IDE будет висеть на каждом изменении файла и будет реагировать очень медленно.
IntelliJ IDEA не использует автоматическую сборку, он обнаруживает ошибки на лету, а не через компилятор. Подобный режим Eclipse будет доступен в идея 12:
использовать
Build
/Make
, это вызывает инкрементный процесс make, который будет компилировать только измененные и зависимые файлы (это очень быстро).есть еще и FAQ запись что может помочь.
обновление функции автоматического создания: Когда выполняется конфигурация run/debug,
Make project automatically
не имеет никакого эффекта. Классы на диске будут меняться только наBuild
/Make
. Это основное дизайнерское решение, поскольку, по нашему мнению, изменения класса на диске должны всегда находиться под контролем пользователя. Автоматический сделайте это не подражатель функции Eclipse, он работает по-другому, и его основная цель-сэкономить время, ожидая, когда классы будут готовы, когда они действительно нужны (перед запуском приложения или тестов). Автоматическое создание не заменяет явную компиляцию, которую вам все еще нужно запустить, как в случае, описанном в этом вопросе. Если вы ищете другое поведение, плагин EclipseMode, связанный в FAQ выше, будет лучшим выбором.
Вы можете раскладки
ctrl+s
для сохранения и компиляции в один шаг. Перейдите в настройки клавиатуры и найдитеCompile
.
есть на самом деле без разницы как оба требуют 1 клик:
- затмение: ручное сохранение, автоматическая компиляция.
- IntelliJ: автоматическое сохранение, ручная компиляция.
простое решение - это просто привыкнуть к нему. Потому что когда вы проводите большую часть дня в своей среде IDE, то лучше иметь быстрые привычки в одном, чем медленные привычки в нескольких из них.
мне удалось решить эту проблему с помощью макросов.
Я начал записывать макрос:
- нажмите Редактировать-макросы-начать запись макросов
- Нажмите Файл-Сохранить Все
- Нажмите Build-Make Project
- нажмите Редактировать-макросы-остановить запись макросов
назовите это что-то полезное, например, "SaveAndMake".
теперь просто удалить сохранения всех клавиш, и добавьте такое же сочетание клавиш для макроса!
Так теперь, каждый раз, когда я сохраняю, он сохраняет и делает грязную компиляцию, и jRebel теперь обнаруживает все изменения правильно.
пожалуйста, выполните следующие действия, чтобы включить его.
1) создайте проект Spring Boot с SB V1. 3 и добавьте "Devtools" (1*) в зависимости
2) Вызов справки-> "найти"... и введите "реестр", в диалоговом окне поиска "automake "и включите запись"компилятора.сожалению.позволять.когда.приложение.работает", закройте диалоговое окно
3) включить фоновую компиляцию в настройках- > сборка, выполнение, развертывание - > компилятор " сделать проект автоматически"
4) Откройте Spring Boot run config, вы должны получить предупреждающее сообщение, если все настроено правильно
5) запустите приложение, измените свои классы на лету
пожалуйста, сообщите о своем опыте и проблемах в качестве комментариев к этому вопросу.
используйте плагин переформатирования и компиляции (вдохновленный плагином Save Actions от Alexandre DuBreuil):
https://plugins.jetbrains.com/plugin/8231?pr=idea_ce
на данный момент мне предлагают только файл jar, но это самая важная часть кода:
private final static Set<Document> documentsToProcess = new HashSet<Document>(); private static VirtualFile[] fileToCompile = VirtualFile.EMPTY_ARRAY; // The plugin extends FileDocumentManagerAdapter. // beforeDocumentSaving calls reformatAndCompile private static void reformatAndCompile( @NotNull final Project project, @NotNull final Document document, @NotNull final PsiFile psiFile) { documentsToProcess.add(document); if (storage.isEnabled(Action.compileFile) && isDocumentActive(project, document)) { fileToCompile = isFileCompilable(project, psiFile.getVirtualFile()); } ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { if (documentsToProcess.contains(document)) { documentsToProcess.remove(document); if (storage.isEnabled(Action.optimizeImports) || storage.isEnabled(Action.reformatCode)) { CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() { @Override public void run() { if (storage.isEnabled(Action.optimizeImports)) { new OptimizeImportsProcessor(project, psiFile) .run(); } if (storage.isEnabled(Action.reformatCode)) { new ReformatCodeProcessor( project, psiFile, null, ChangeListManager .getInstance(project) .getChange(psiFile.getVirtualFile()) != null) .run(); } ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(psiFile); } }); } }); } } if (fileToCompile.length > 0) { if (documentsToProcess.isEmpty()) { compileFile(project, fileToCompile); fileToCompile = VirtualFile.EMPTY_ARRAY; } } else if (storage.isEnabled(Action.makeProject)) { if (documentsToProcess.isEmpty()) { makeProject(project); } } else { saveFile(project, document, psiFile.getVirtualFile()); } } }, project.getDisposed()); } private static void makeProject(@NotNull final Project project) { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { CompilerManager.getInstance(project).make(null); } }, project.getDisposed()); } private static void compileFile( @NotNull final Project project, @NotNull final VirtualFile[] files) { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { CompilerManager.getInstance(project).compile(files, null); } }, project.getDisposed()); } private static void saveFile( @NotNull final Project project, @NotNull final Document document, @NotNull final VirtualFile file) { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { final FileDocumentManager fileDocumentManager = FileDocumentManager.getInstance(); if (fileDocumentManager.isFileModified(file)) { fileDocumentManager.saveDocument(document); } } }, project.getDisposed()); }
Intellij терпит неудачу тихо, когда он сталкивается с проблемой компиляции в другом модуле, а затем автоматическая сборка не выполняется. Так что проверьте ваш
Problems
окно
Я получаю ошибку: некоторые банки не в classpath.So я просто удаляю поврежденную банку и perrform ниже шагов
1.Project > Setting>Build,Execution,Deployment>Compiler>check build project automatically 2.CTRL+SHIFT+A find/search **registry** --Check for below param compiler.automake.allow.when.app.running compiler.automake.trigger.delay=500---According to ur requirement 3.Add devtool in pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> 4.Build ,If found any probelm while building ,saying some jar in not in class path.Just delete the corrupted jar and re-build the project angain after sync with maven lib
У меня была та же проблема. Я использовал "режим энергосбережения", который предотвращает постепенную компиляцию и показывает ошибки компиляции.
недостаточно очков, чтобы прокомментировать существующий ответ, но, как и некоторые люди выше, я просто добавил макрос и клавиатуру в Организовать Импорт / Формат / SaveAll / FastReload (F9) / Synchronize.
синхронизация добавлена, поскольку это, кажется, единственный способ, которым я могу также видеть обновления в ресурсах, измененных внешними инструментами сборки / наблюдателями (т. е. webpack).
процесс идет медленнее, чем eclipse - и для внешнего обновления файлов часто приходится запускать команда несколько раз - но предположим, что я могу жить с этим.