web-dev-qa-db-ja.com

Intellij IDEA Javaクラスが保存時に自動コンパイルされない

昨日、EclipseからIntelliJ IDEAに切り替えました。

JRebelをWebSphere Server 7でも使用しています。

私が変更するとき Javaファイル、およびヒットを保存する、IntelliJ しないを再コンパイルすることを除いて、現在はすべてうまく動作しているようですJRebelが取得するためのファイル。

Eclipseの「自動的にビルド」機能により、この問題は解決されました。

IntelliJ IDEAでは、ヒットする必要があります CTRL+SHIFT+9 関連するクラスを再コンパイルしてJRebelがそれを取得するようにします。 2つのファイルで変更が行われた場合、各1つでこれを行うがあり、IntelliJはすべてを保存するメカニズムを使用しているため、何を再コンパイルするかを知るのは非常に困難です手動で行うことは、どちらにもあまり興味がありません。

IntelliJを独自にこれを行うにする方法はありませんか?

159
momomo

両方の手順に従ってください:

1-コンパイラーからAutomakeを有効にします

  • 押す: ctrl + shift + A (Mac用  + shift + A
  • タイプ:make project automatically
  • ヒット: Enter
  • Make Project automatically機能を有効にする

2-アプリケーションの実行中にAutomakeを有効にする

  • 押す: ctrl + shift + A (Mac用  + shift + A
  • タイプ:Registry
  • キーcompiler.automake.allow.when.app.runningを見つけ、その横にある有効にするまたはチェックボックスをクリックする

注:今すぐアプリケーションを再起動してください:)

注:これにより、スプリングブートdevtoolsによるライブリロードも可能になります。

72
snovelli

警告

Eclipse Modeプラグインは廃止されており、最近のIDEA 12+ビルドと互換性がありません。インストールすると、IDEはファイルが変更されるたびにハングし、応答が非常に遅くなります。


IntelliJ IDEAは自動ビルドを使用せず、コンパイラ経由ではなく、その場でエラーを検出します。 Eclipseモードと同様に、 IDEA 12 で利用できます:

Make project automatically

Buildを使用します| Make、変更された依存ファイルのみをコンパイルするインクリメンタルmakeプロセスを呼び出します(非常に高速です)。

FAQエントリ も役立ちます。

自動make機能の更新:実行/デバッグ構成の実行中、Make project automaticallyは効果がありません。ディスク上のクラスはBuildでのみ変更されます| Make。私たちの意見では、ディスク上のクラスの変更は常にユーザーの制御下にある必要があるため、これは設計の中心的な決定事項です。自動makeはEclipse機能の模倣ではありません。動作が異なり、主な目的は、クラスが本当に必要なときに(アプリやテストを実行する前に)クラスが準備できるのを待つ時間を節約することです。この質問で説明されている場合のように、自動makeは、トリガーする必要がある明示的なコンパイルを置き換えません。別の動作を探している場合は、上記のFAQにリンクされているEclipseModeプラグインの方が適しています。

65
CrazyCoder

ctrl+sをキーマップして、1ステップで保存およびコンパイルできます。キーマップ設定に移動し、Compileを検索します。

36
Daniel Kaplan

最終的にマクロを記録して、ワンステップで保存およびコンパイルし、Ctrl+sをキーマップしました。

14
TonioKnight

実際には違いなしがあります。両方とも1クリックが必要です。

  • Eclipse:手動保存、自動コンパイル。
  • IntelliJ:自動保存、手動コンパイル。

最も簡単な解決策はそれに慣れることです。なぜなら、日中のほとんどをIDEで過ごすときは、そのうちのいくつかで遅い習慣をつけるよりも、速い習慣を1つで持つほうがよいからです。

14
andruso

マクロを使用してこれを解決できました。

マクロの記録を開始しました:

  • [編集]-[マクロ]-[マクロの記録を開始]をクリックします
  • [ファイル]-[すべて保存]をクリックします
  • ビルド-プロジェクトの作成をクリックします
  • [編集]-[マクロ]-[マクロの記録を停止]をクリックします

「SaveAndMake」のような便利な名前を付けます。

ここで、Save allキーバインドを削除して、同じキーバインドをマクロに追加してください!

そのため、保存するたびにダーティコンパイルが保存および作成され、jRebelはすべての変更を正しく検出します。

10
Niklas Lönn

次の手順を慎重に実行して、有効にしてください。

1)SB V1.3でSpring Bootプロジェクトを作成し、依存関係に「Devtools」(1 *)を追加します

2)Help-> Find Action ...を呼び出し、「Registry」と入力し、ダイアログで「automake」を検索して、エントリ「compiler.automake.allow.when.app.running」、ダイアログを閉じる

3)[設定]-> [ビルド、実行、展開]-> [プロジェクトの自動作成]でバックグラウンドコンパイルを有効にします。

4)Spring Bootの実行構成を開き、すべてが正しく構成されている場合は警告メッセージが表示されます

5)アプリを実行し、オンザフライでクラスを変更します

この問題に対するコメントとして、あなたの経験や問題を報告してください。

詳細はここをクリック

5
Ajay

Intellijは、他のモジュールでコンパイルの問題が発生すると静かに失敗し、自動ビルドは実行されません。 Problemsウィンドウを確認してください

2
tworec

私のMavenプロジェクトでこれによって影響を受けた唯一のことは、ユニットテストの実行構成に「テストコンパイル」目標を追加することです。信じられないほど不器用なソリューションですが、動作します。

enter image description here

2
keyboardsamurai

プロジェクト構造に不要なモジュールがあるため、機能していませんでした。テストは他のモジュールを使用して実行されたと思います。

どうやってそれがそのようになったのかわかりませんが、それを取り除くことで問題は解決しました。

実行/デバッグ設定が、自動保存で構築しているモジュールを使用していることを確認してください。

例えば。 :のモジュールを参照

enter image description here

プロジェクト構造-モジュールでモジュールを変更できます

enter image description here

1
Orkun Ozen

Reformat and Compileプラグインを使用します(Alexandre DuBreuilのSave Actionsプラグインに触発された):

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

エラーが発生していました:一部のjarがクラスパスにないため、破損したjarと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
0
Priyanshu Singh

起動前にビルドオプションが選択されるように実行/デバッグ構成を編集します

enter image description here

ビルドオプションが選択された後

enter image description here

上記のソリューションは、JBehaveテストスイートでの作業中に機能しました

0