Классы 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 automaticallyfeature2-включить 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 - и для внешнего обновления файлов часто приходится запускать команда несколько раз - но предположим, что я могу жить с этим.





