205

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

WebSphereServer7でもJRebelを使用しています。

Javaファイルを変更して[保存]をクリックすると、JRebelがファイルを取得するために、IntelliJがファイルを再コンパイルしないことを除いて、すべてが正常に機能しているように見えます。

Eclipseの「自動ビルド」機能はこの問題を解決しました。

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

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

4

20 に答える 20

277

更新しました

IntelliJ IDEA 12以降のリリースでは、外部コンパイラオプションを使用している場合、編集されたソースを自動的にビルドできます。必要なのは、「コンパイラ」設定の下にある「プロジェクトを自動的にビルドする」オプションをチェックすることだけです。

コンパイラ設定

また、アプリケーションの実行中にホットデプロイする場合、またはSpring Boot devtoolsを使用している場合は、compiler.automake.allow.when.app.runningfromレジストリも有効にする必要があります。これにより、変更が自動的にコンパイルされます。

2021.2より大きいバージョンの場合、「開発アプリケーションが現在実行されている場合でも自動作成の開始を許可する」オプションをチェックする必要があります。 ここに画像の説明を入力してください

2021.2より古いバージョンの場合:

+ Ctrl+ ShiftAまたは⌘</kbd>+Shift+A on Mac) type Registry once the registry windows is open, locate and enable compiler.automake.allow.when.app.running, see here:

ここに画像の説明を入力してください


12より古いバージョンの場合、* EclipseMode *プラグインを使用して、IDEAに保存されたファイルを自動的にコンパイルさせることができます。

その他のヒントについては、「EclipseからIntelliJIDEAへの移行」ガイドを参照してください。

于 2012-10-05T10:35:56.670 に答える
80

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

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

  • 押す:ctrl+ shift+ A(Macの場合⌘</kbd> + shift + A)
  • タイプ:make project automatically
  • 打つ:Enter
  • Make Project automatically機能を有効にする

2-アプリケーションの実行中に自動作成を有効にします

  • 押す:ctrl+ shift+ A(Macの場合⌘</kbd> + shift + A)
  • タイプ:Registry
  • compiler.automake.allow.when.app.runningキーを見つけて有効にするか、キーの横にあるチェックボックスをクリックします

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

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

于 2016-04-24T19:01:08.460 に答える
68

警告

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


IntelliJ IDEAは自動ビルドを使用せず、コンパイラを介さずにその場でエラーを検出します。Eclipseモードと同様にIDEA12で利用可能になります:

プロジェクトを自動的に作成

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

役立つかもしれないFAQエントリもあります。

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

于 2012-10-05T10:36:06.587 に答える
39

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

于 2012-12-18T22:06:33.147 に答える
20

どちらも1回のクリックが必要なため、実際には違いはありません。

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

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

于 2015-03-02T08:24:54.257 に答える
17

結局、マクロを記録して1つのステップで保存およびコンパイルし、それにキーマップCtrl+sを作成しました。

于 2013-01-23T19:15:39.697 に答える
14

マクロを使ってこれを解決することができました。

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

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

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

次に、[すべて保存]キーバインドを削除し、同じキーバインドをマクロに追加します。

これで、保存するたびに保存されてダーティコンパイルが行われ、jRebelがすべての変更を正しく検出するようになりました。

于 2015-02-27T12:18:07.993 に答える
5

これらの手順を注意深く実行して有効にしてください。

1)SBV1.3を使用してSpringBootプロジェクトを作成し、依存関係に「Devtools」(1 *)を追加します

2)[ヘルプ]-> [アクションの検索...]を呼び出して「レジストリ」と入力し、ダイアログで「automake」を検索して「compiler.automake.allow.when.app.running」というエントリを有効にし、ダイアログを閉じます。

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

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

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

この問題へのコメントとしてあなたの経験と問題を報告してください。

詳細については、ここをクリックしてください

于 2017-02-02T03:42:42.783 に答える
2

これによって影響を受けた私のMavenプロジェクトで私のために働いた唯一のことは、単体テストの実行構成に「テストコンパイル」目標を追加することです。信じられないほど不器用な解決策ですが、それは機能します。

ここに画像の説明を入力してください

于 2017-04-29T11:01:01.650 に答える
2

Intellijは、他のモジュールでコンパイルの問題が発生すると静かに失敗し、自動ビルドは実行されません。だからあなたのProblems窓をチェックしてください

于 2017-10-23T19:56:49.610 に答える
2

同じ問題とintellijの問題ファイルアイコンがあったので、フォルダーを削除.ideaしてプロジェクトを再インポートすると問題が解決しました。

于 2020-05-04T05:29:44.560 に答える
2

新しいIntellijバージョンを使用していて、見つけることができない人のためにcompiler.automake.allow.when.app.running

https://youtrack.jetbrains.com/issue/IDEA-274903

基本的に、オプションはSettings -> Advanced Settings -> Compiler([自動作成を許可する]オプションをオンにする)に移動しました

于 2021-10-09T17:45:19.797 に答える
1

私も同じ問題を抱えていました。増分コンパイルやコンパイルエラーの表示を防ぐ「省電力モード」を使用していました。

于 2014-12-26T21:12:36.003 に答える
1

Reformat and Compileプラグイン(AlexandreDuBreuilのSaveActionsプラグインに触発された)を使用します。

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());
}
于 2016-03-01T15:43:31.840 に答える
1

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

于 2018-08-30T15:30:53.887 に答える
1

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

どうしてそうなったのかわかりませんが、削除すれば問題は解決しました。

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

例:のモジュールを参照してください

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

于 2019-03-12T10:24:09.043 に答える
1

私も同じ問題を抱えていました。クラスをコンパイルできるかどうかを確認するのが適切だと思います。再コンパイルをクリックします(デフォルトではCtrl + Shift + F9)。それが機能しない場合は、コンパイルされない理由を調査する必要があります。

私の場合、コンパイルに隠れたエラーがあったため、コードは自動コンパイルされませんでした(ログにはどこにも表示されず、Mavenクリーンインストールが機能していました)。根本原因はプロジェクト構造->モジュール構成が正しくなかったため、IntellijIdeaはこの構成に従ってビルドできませんでした。

于 2020-02-10T15:58:15.360 に答える
1

Intellij 2021以降の場合、レジストリエントリは見つかりません

compiler.automake.allow.when.app.running

以下のスクリーンショットに示すように、詳細設定に移動されました

IntelliJ詳細設定のスクリーンショット

ソース:https ://youtrack.jetbrains.com/issue/IDEA-274903

于 2021-10-11T22:22:39.037 に答える
0

エラーが発生しました:一部のjarがクラスパスにないため、破損したjarを削除して、以下の手順を実行します

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
于 2018-05-07T02:56:59.843 に答える
-1

既存の回答にコメントするのに十分なポイントはありませんが、上記の一部の人々と同様に、インポートの整理/フォーマット/ SaveAll / FastReload(F9)/同期にマクロとキーマップを追加するだけで終わりました。

同期が追加されたのは、外部のビルドツール/ウォッチャー(つまり、webpack)によって変更されたリソースの更新を確認できる唯一の方法のようです。

このプロセスはEclipseよりも遅く、外部ファイルの更新ではコマンドを複数回実行する必要がありますが、私はそれを使用できると仮定します。

于 2017-07-14T02:37:19.443 に答える