programing

Intelij IDEA Java 클래스가 저장 시 자동으로 컴파일되지 않음

goodsources 2022. 8. 10. 22:26
반응형

Intelij IDEA Java 클래스가 저장 시 자동으로 컴파일되지 않음

어제 나는 이클립스의 인텔리J IDEA로 바꿨다.

WebSphere Server 7에서도 JRebel을 사용하고 있습니다.

Java 파일을 수정하고 Save를 누르면 JRebel이 파일을 픽업하기 위해 IntelliJ가 파일을 다시 컴파일하지 않는 것 에는 모든 것이 정상적으로 동작하고 있는 것 같습니다.

이 문제는 Eclipse "자동 빌드" 기능으로 해결되었습니다.

인텔리J IDEA에서는 ++SHIFT9를 눌러 해당 클래스를 다시 컴파일해야 JRebel이 픽업할 수 있습니다.2개의 파일에 변경을 가하는 경우는, 각각 1개의 파일에 대해작업을 실시할 필요가 있습니다.인텔리J는 save all 메카니즘을 사용하고 있기 때문에, 수동으로 재컴파일 하는 것도 별로 흥미가 없습니다.

인텔리J가 알아서 하게 만드는 방법은 없을까?

갱신했다

IntelliJ IDEA 12+ 릴리스에서는 외부 컴파일러 옵션을 사용하면 편집된 소스를 자동으로 빌드할 수 있습니다.컴파일러 설정 아래에 있는 "프로젝트 자동 빌드" 옵션을 켜기만 하면 됩니다.

컴파일러 설정

중 boot spring boot devtools를 .compiler.automake.allow.when.app.running츠요시그러면 변경 내용이 자동으로 컴파일됩니다.

2021.2보다 이전 버전의 경우 '개발 어플리케이션이 현재 실행 중인 ID에서 짝수 시작 자동 생성 허용' 옵션을 선택해야 합니다.

2021년 이전 버전의 경우.2:

++(ShiftA또는 Mac에서는 ShiftA++) 유형 사용Registry, 「이네이블」을 해 유효하게 .compiler.automake.allow.when.app.running , 「 」를해 주세요.

여기에 이미지 설명 입력


For versions older than 12, you can use the *EclipseMode* plugin to make IDEA automatically compile the saved files.

자세한 내용은 "Eclipse에서 IntelliJ IDEA로의 이행" 가이드를 참조하십시오.

두 단계를 모두 수행하십시오.

1 - 컴파일러에서 자동화를 유효하게 합니다.

  • + + 를 누릅니다(Mac + + 의 경우).
  • ★★★★★make project automatically
  • 히트:
  • 능능 enable enable enable enable를 유효하게 Make Project automatically

2 - 응용 프로그램 실행 시 자동 생성 사용

  • + + 를 누릅니다(Mac + + 의 경우).
  • ★★★★★Registry
  • 를 찾다compiler.automake.allow.when.app.running활성화하거나 에 있는 체크박스를 클릭합니다.

주의: 지금 바로 응용 프로그램을 재시작하십시오. : )

참고: 이렇게 하면 스프링 부트 devtools를 사용한 라이브 새로고침도 가능합니다.

경고

이클립스 모드 플러그인은 더 이상 사용되지 않으며 최근 IDEA 12+ 빌드와 호환되지 않습니다.인스톨 하면, IDE 는 파일을 변경할 때마다 행업 해, 응답 속도가 매우 느려집니다.


IntelliJ IDEA는 자동 빌드를 사용하지 않으며 컴파일러가 아닌 즉각적인 오류를 검출합니다.이클립스 모드와 유사한 기능을 IDEA 12에서 사용할 수 있습니다.

자동으로 프로젝트 만들기

Build|Make변경 및 종속 파일만 컴파일하는 증분 작성 프로세스를 실행합니다(매우 빠릅니다).

도움이 될 수 있는 FAQ 항목도 있습니다.

자동 만들기 기능 업데이트:실행/디버깅 구성이 실행 중일 때Make project automatically과가없없 없없없다다디스크의 클래스는 다음 날짜에만 변경됩니다.Build|Make디스크상의 변경은 항상 유저가 제어할 필요가 있기 때문에, 이것은 설계의 핵심 결정입니다.자동 제작은 Eclipse 기능의 모방품이 아니라 다른 방식으로 작동하며, 주요 목적은 (앱이나 테스트를 실행하기 전에) 수업이 정말 필요할 때 준비가 될 때까지 기다리는 시간을 절약하는 것입니다.자동 생성은 이 질문에 설명된 경우처럼 트리거해야 하는 명시적 컴파일을 대체하지 않습니다.다른 동작을 찾고 있다면 위의 FAQ에 링크된 EclipseMode 플러그인을 선택하는 것이 좋습니다.

맵은 " " " 입니다.ctrl+s한 번에 저장하고 컴파일할 수 있습니다.하여 " " " 를 합니다.Compile.

둘 다 클릭 한 번이 필요하므로 실제로는 차이가 없습니다.

  • 이클립스: 수동 저장, 자동 컴파일.
  • IntelliJ: 자동 저장, 수동 컴파일.

가장 간단한 해결책은 단지 그것에 익숙해지는 것이다.왜냐하면 대부분의 시간을 IDE에서 보낼 때는 그 중 몇 가지에서 느린 습관보다 한 번에 빠른 습관을 갖는 것이 더 낫기 때문입니다.

저장 및 컴파일을 위한 매크로를 한 번에 기록하고 키맵을 작성했습니다.Ctrl+s그렇게.

매크로를 사용하여 이 문제를 해결할 수 있었습니다.

매크로 기록을 시작했습니다.

  • [편집] - [매크로] - [매크로 기록 시작]을 클릭합니다.
  • [파일] - [모두 저장]을 클릭합니다.
  • [빌드] - [프로젝트 만들기]을 클릭합니다.
  • [편집] - [매크로] - [매크로 기록 중지]을 클릭합니다.

"Save And Make"와 같은 유용한 이름을 지정하십시오.

이제 Save all keybinding을 삭제하고 동일한 키바인딩을 매크로에 추가합니다.

따라서 저장할 때마다 저장 및 부적절한 컴파일이 이루어지며, 이제 jRebel은 모든 변경 사항을 올바르게 감지합니다.

유효하게 하려면 , 다음의 순서에 주의해 주세요.

1) SB V1.3으로 Spring Boot 프로젝트를 생성하여 의존관계에 "Devtools" (1*) 추가

2) 도움말 호출 -> 액션 찾기...대화상자 검색에서 "Registry"를 입력하고 "Automatake"를 선택한 후 "compiler"오토메이크allow.when.app.running" 대화 상자 닫기

3) 설정 -> 빌드, 실행, 전개 -> 컴파일러 "프로젝트를 자동으로 작성"에서 백그라운드 컴파일을 활성화합니다.

4) Spring Boot run config를 엽니다.모든 것이 올바르게 설정되어 있으면 경고 메시지가 나타납니다.

5) 앱 실행, 수업 변경 즉시

이 문제에 대한 코멘트로 당신의 경험과 문제점을 보고해 주세요.

자세한 내용은 여기를 클릭해 주세요.

이 영향을 받은 메이븐 프로젝트에서 유일하게 효과가 있었던 것은 유닛 테스트의 실행 구성에 "테스트 컴파일" 목표를 추가하는 것이었습니다.믿을 수 없을 정도로 서투른 해결책이지만, 효과가 있습니다.

여기에 이미지 설명 입력

다른 모듈에서 컴파일 문제가 발생하여 자동 빌드가 실행되지 않으면 Intelij가 조용히 실패합니다.해 주세요Problems 디스플레이

인텔리지에 같은 문제가 있고 파일 아이콘도 문제가 있어서 삭제했습니다..idea수입하다

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★Intellij수 .compiler.automake.allow.when.app.running

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

이 본기음음음음음음음음음음음음음으로 되었습니다.Settings -> Advanced Settings -> Compiler([옵션을 ([Allow auto-make]는 [Allow auto-make]는 [Allow auto-make]는 켜겠습니다

저도 같은 문제가 있었어요.「전력 절약 모드」를 사용하고 있었습니다.이 모드에서는, 컴파일이 증분해, 컴파일 에러가 표시되지 않게 됩니다.

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

실행/디버깅 구성을 편집하여 실행 전에 빌드 옵션을 선택합니다.

여기에 이미지 설명 입력

빌드 옵션을 선택한 후

여기에 이미지 설명 입력

위의 솔루션은 JBehave 테스트 스위트를 작업하는 동안 효과가 있었습니다.

프로젝트 구조에 불필요한 모듈이 있어서 작동하지 않았습니다.테스트는 다른 모듈을 사용하여 수행되었을 것입니다.

어쩌다 그렇게 됐는지 모르겠지만 제거해 버리면 문제가 해결됐어요.

실행/디버깅 설정이 자동 저장으로 빌드하는 모듈을 사용하고 있는지 확인합니다.

예: 의 모듈을 참조하십시오.

여기에 이미지 설명 입력

Project Structure - Modules에서 모듈을 변경할 수 있습니다.

여기에 이미지 설명 입력

저도 같은 문제가 있었어요.당신의 수업이 편찬될 수 있는지 확인하는 것이 적절할 것 같습니다.재컴파일(기본값으로 Ctrl+Shift+F9)을 클릭합니다.정상적으로 동작하지 않는 경우는, 컴파일 되지 않는 이유를 조사할 필요가 있습니다.

제 경우 컴파일과 관련된 숨겨진 오류가 있었기 때문에 코드가 자동 컴파일되지 않았습니다(로그에는 표시되지 않았고 새로 설치는 작동했습니다).원인은 Project Structure -> Modules 구성이 잘못되었기 때문에 Intelliz Idea는 이 구성에 따라 구축할 수 없었습니다.

Intellij 2021 이후에는 레지스트리 엔트리를 찾을 수 없습니다.

컴파일러.오토메이크allow.when.app.running

아래 스크린샷과 같이 고급 설정으로 이동되었습니다.

IntelliJ 상세 설정 스크린샷

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

오류가 발생했습니다. 일부 항아리가 클래스 경로에 없습니다.그래서 그냥 손상된 항아리를 삭제하고 아래 단계를 수행합니다.

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

기존 답변에 대한 코멘트는 부족하지만, 위의 몇 사람과 마찬가지로 Organized Imports / Format / Save All / FastReload (F9) / Synchronize에 매크로 & 키맵을 추가했을 뿐입니다.

동기화가 추가된 것은 외부 빌드 도구/워치(웹 팩 등)에 의해 수정된 리소스 업데이트를 볼 수 있는 유일한 방법인 것 같습니다.

이 프로세스는 exclipse보다 느리고 외부 파일 새로 고침의 경우 명령을 여러 번 실행해야 하는 경우가 많습니다. 그러나 이 작업을 수행할 수 있다고 가정합니다.

언급URL : https://stackoverflow.com/questions/12744303/intellij-idea-java-classes-not-auto-compiling-on-save

반응형