web-dev-qa-db-fra.com

Intellij IDEA Les classes Java ne compilent pas automatiquement lors de l'enregistrement

Hier, je suis passé d’Inclij à Intellij. 

J'utilise jRebel avec Websphere Server 7 également.

Tout semble maintenant fonctionner un peu bien, sauf que lorsque je modifie un fichier Java et sauvegarder, Intellij ne fonctionne pas recompilez le fichier, dans commande pour que jRebel le ramasse. 

La fonctionnalité "Construire automatiquement" d'Eclipse a résolu ce problème. 

Dans Intellij, je dois appuyer sur CTRL + SHIFT + 9 pour recompiler la classe appropriée pour que jRebel le récupère. Si des modifications sont apportées entre deux fichiers _ _, j’ai les pour le faire sur chacun d’eux et eux, et comme Intellij utilise le mécanisme «Enregistrer tout», il est assez difficile de savoir quoi recompiler Je ne suis pas vraiment intéressé à faire non plus.

N'y a-t-il pas moyen de rendre Intellij à le faire tout seul?

151
momomo

S'il vous plaît suivez les deux étapes:

1 - Activer Automake à partir du compilateur

  • Presse: ctrl + shift + A (Pour Mac  + shift + A)
  • Tapez: make project automatically
  • Frappé: Enter
  • Activer la fonction Make Project automatically

2 - Activer Automake lorsque l'application est en cours d'exécution

  • Presse: ctrl + shift + A (Pour Mac  + shift + A)
  • Tapez: Registryname__
  • Trouvez la clé compiler.automake.allow.when.app.running et activez-la ou cochez la case à côté

Remarque: redémarrez votre application maintenant :)

Remarque: Ceci devrait également permettre un rechargement en direct avec devtools.

72
snovelli

ATTENTION

Le plug-in Eclipse Mode est obsolète et n'est pas compatible avec les versions récentes IDEA 12+. Si vous l'installez, IDE sera suspendu à chaque modification de fichier et répondra extrêmement lentement.


IntelliJ IDEA n'utilise pas de génération automatique, il détecte les erreurs à la volée, pas via le compilateur. Semblable au mode Eclipse sera disponible dans IDEA 12 :

Make project automatically

Utilisez Build | Make, il appelle le processus de création incrémentiel qui compile uniquement les fichiers modifiés et dépendants (très rapide).

Il existe également une entrée FAQ qui peut aider.

Mise à jour de la fonction de création automatique: Lorsque la configuration est en cours d'exécution/de débogage, Make project automatically n'a aucun effet. Les classes sur le disque ne changeront que sur Build | Make. C’est la décision fondamentale en matière de conception car, à notre avis, les modifications apportées aux classes sur disque doivent toujours être sous le contrôle de l’utilisateur. La création automatique n'est pas la copie de la fonctionnalité Eclipse, elle fonctionne différemment et son objectif principal est de gagner du temps en attendant que les classes soient prêtes lorsqu'elles sont réellement nécessaires (avant d'exécuter l'application ou les tests). La création automatique ne remplace pas la compilation explicite que vous devez encore déclencher, comme dans le cas décrit dans cette question. Si vous recherchez un comportement différent, le plug-in EclipseMode lié à la FAQ ci-dessus serait un meilleur choix.

64
CrazyCoder

Vous pouvez utiliser la clé ctrl+s pour enregistrer ET compiler en une étape. Accédez aux paramètres du clavier et recherchez Compile.

36
Daniel Kaplan

Il n'y a en fait pas de différence comme les deux requièrent 1 clic:

  • Eclipse: Sauvegarde manuelle, compilation automatique. 
  • IntelliJ: sauvegarde automatique, compilation manuelle.

La solution la plus simple est juste pour s'y habituer. Parce que lorsque vous passez la majeure partie de la journée dans votre IDE, il vaut mieux adopter des habitudes rapides en un que des habitudes lentes dans plusieurs d’entre elles.

15
andruso

J'ai fini par enregistrer un Macro pour le sauvegarder et le compiler en une étape, avec le keymap Ctrl+s.

14
TonioKnight

J'ai réussi à résoudre ce problème en utilisant des macros.

J'ai commencé à enregistrer une macro:

  • Cliquez sur Edition - Macros - Démarrer l'enregistrement de macros
  • Cliquez sur Fichier - Enregistrer tout
  • Cliquez sur Build - Make Project
  • Cliquez sur Edition - Macros - Arrêter l'enregistrement de macros

Nommez-le comme "SaveAndMake".

Maintenant, supprimez le raccourci clavier Enregistrer tout et ajoutez le même raccourci clavier à votre macro! 

Alors maintenant, chaque fois que j'enregistre, il enregistre et crée une compilation sale, et jRebel détecte désormais toutes les modifications correctement.

10
Niklas Lönn

Veuillez suivre attentivement ces étapes pour l'activer. 

1) créer un projet Spring Boot avec SB V1.3 et ajouter "Devtools" (1 *) aux dépendances 

2) appelez Help-> Find Action ... et tapez "Registry", dans la boîte de dialogue, recherchez "automake" et activez l'entrée "compiler.automake.allow.when.app.running", fermer dialogue

3) activer la compilation en arrière-plan dans Paramètres-> Construire, Exécuter, Déployer-> Compilateur "Créer le projet automatiquement"

4) Ouvrez Spring Boot Run Config, vous devriez recevoir un message d’avertissement si tout est configuré correctement

5) Lancez votre application, changez de cours à la volée

Veuillez signaler vos expériences et problèmes sous forme de commentaires sur ce problème.

cliquez ici pour plus d'informations

5
Ajay

La seule chose qui a fonctionné pour moi dans mon projet maven et qui a été affecté est d'ajouter un objectif "test-compilation" à la configuration d'exécution de mes tests unitaires. Solution incroyablement maladroite, mais cela fonctionne.

 enter image description here

2
keyboardsamurai

Cela ne fonctionnait pas pour moi car j'avais un module inutile dans la structure de mon projet. Les tests ont été exécutés en utilisant l'autre module, je suppose.

Je ne sais pas comment ça a fini comme ça mais l'enlever a résolu le problème.

Assurez-vous que vos paramètres Run/Debug utilisent le module que vous construisez avec la sauvegarde automatique.

Par exemple. : voir le module en

 enter image description here 

Vous pouvez changer les modules dans Structure du projet - Modules

 enter image description here 

1
Orkun Ozen

Utilisez les plugins Reformat et Compile (inspirés du plugin Save Actions d’Alexandre DuBreuil):

https://plugins.jetbrains.com/plugin/8231?pr=idea_ce

Pour le moment, je ne propose qu’un fichier jar, mais c’est la partie la plus importante du code:

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());
}
1
sbmpost

Intellij échoue discrètement lorsqu'il rencontre un problème de compilation dans un autre module, puis la génération automatique n'est pas effectuée. Alors vérifiez votre fenêtre Problems

1
tworec

J'obtenais une erreur: certains fichiers jar ne sont pas dans classpath.Alors je supprime simplement le fichier jar corrompu et perrform en dessous des étapes

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
0
Priyanshu Singh

Editez votre configuration Run/Debug pour que l’option Build soit sélectionnée avant le lancement

 enter image description here

Après que l'option Build soit sélectionnée

 enter image description here

La solution ci-dessus a fonctionné pour moi tout en travaillant sur ma suite de tests JBehave

0
Asanka Siriwardena