저장시 Intellij IDEA Java 클래스가 자동 컴파일되지 않음
어제 Eclipse에서 IntelliJ IDEA로 전환했습니다.
WebSphere Server 7에서도 JRebel을 사용하고 있습니다.
Java 파일을 수정 하고 save 키 를 누르면 JRebel이 파일을 가져 오기 위해 IntelliJ 가 파일을 다시 컴파일 하지 않는다는 점을 제외하고는 모든 것이 다소 정상적으로 작동하는 것 같습니다 .
Eclipse " 자동 빌드 "기능으로이 문제가 해결되었습니다.
IntelliJ IDEA에서 CTRL+ SHIFT+ 9를 눌러 JRebel이 관련 클래스를 다시 컴파일해야합니다. 두 파일 에서 변경이 수행되면 각각 하나의 파일 에서이 작업을 수행 해야하며 IntelliJ는 모든 저장 메커니즘을 사용하기 때문에 수동으로 다시 컴파일 해야하는 것을 알기가 어렵습니다.
IntelliJ가 독자적 으로이 작업 을 수행 할 수있는 방법 이 없습니까?
업데이트
IntelliJ IDEA 12+ 릴리스의 경우 외부 컴파일러 옵션을 사용하는 경우 편집 된 소스를 자동으로 빌드 할 수 있습니다. 필요한 것은 " 컴파일러 "설정 아래에있는 " 프로젝트 자동 빌드 "옵션을 확인하는 것입니다 .
또한 핫 배포를 원하거나 응용 프로그램이 실행되는 동안 또는 스프링 부트 devtools를 사용하는 경우 compiler.automake.allow.when.app.running
from 레지스트리도 활성화해야합니다 . 변경 사항이 자동으로 컴파일됩니다.
사용 Ctrl+ Shift+ A(또는 ⌘+ Shift+ AMac에서) 유형을 Registry
레지스트리 창이 열리면, 찾아 있도록 compiler.automake.allow.when.app.running
여기를 참조 :
12보다 오래된 버전의 경우 EclipseMode 플러그인을 사용하여 IDEA가 저장된 파일을 자동으로 컴파일하도록 할 수 있습니다 .
자세한 내용은 "Eclipse에서 IntelliJ IDEA로 마이그레이션" 안내서 를 참조하십시오 .
두 단계를 모두 수행하십시오.
1-컴파일러에서 자동 작성 사용
- 누릅니다 : ctrl+ shift+ A(Mac ⌘+ shift+ A)
- 유형:
make project automatically
- 히트: Enter
Make Project automatically
기능 사용
2-응용 프로그램이 실행 중일 때 자동 작성 사용
- 누릅니다 : ctrl+ shift+ A(Mac ⌘+ shift+ A)
- 유형:
Registry
- 키 찾기
compiler.automake.allow.when.app.running
및 활성화 하거나 확인란을 클릭 옆에
참고 : 지금 응용 프로그램을 다시 시작하십시오 :)
참고 : 이것은 스프링 부트 devtools로 실시간 재로드를 허용해야합니다.
경고
Eclipse 모드 플러그인은 더 이상 사용되지 않으며 최신 IDEA 12+ 빌드와 호환되지 않습니다. 설치하면 IDE가 모든 파일 변경에 응답하지 않고 매우 느리게 응답합니다.
IntelliJ IDEA는 자동 빌드를 사용하지 않으며 컴파일러를 통하지 않고 즉시 오류를 감지합니다. IDEA 12 에서는 Eclipse 모드와 유사합니다 .
사용 Build
| Make
변경되고 종속 된 파일 만 컴파일하는 증분 make 프로세스를 호출합니다 (매우 빠름).
도있다 자주 묻는 질문 항목이 도움이 될 수 있습니다.
자동 작성 기능에 대한 업데이트 : 실행 / 디버그 구성이 실행 중일 때는 Make project automatically
영향을 미치지 않습니다. 디스크의 클래스는 Build
| Make
. 디스크의 변경 사항은 항상 사용자의 통제하에 있어야합니다. 자동 make는 Eclipse 기능의 복제본이 아니며 다르게 작동하며 주된 목적은 클래스가 실제로 필요할 때 (앱 또는 테스트를 실행하기 전에) 준비 될 때까지 기다리는 시간을 절약하는 것입니다. 자동 make는이 질문에 설명 된 경우와 같이 여전히 트리거해야하는 명시 적 컴파일을 대체하지 않습니다. 다른 동작을 찾고 있다면 위의 FAQ에 링크 된 EclipseMode 플러그인이 더 나은 선택입니다.
ctrl+s
한 번에 키맵 을 저장하고 컴파일 할 수 있습니다 . 키맵 설정으로 이동하여을 검색하십시오 Compile
.
한 번에 저장하고 컴파일하기 위해 매크로 를 기록 하고 키 맵 Ctrl+s
을 작성했습니다.
두 번의 클릭이 모두 필요하므로 실제로 차이 는 없습니다 .
- Eclipse : 수동 저장, 자동 컴파일.
- IntelliJ : 자동 저장, 수동 컴파일.
가장 간단한 해결책 은 그것에 익숙해지는 것입니다. IDE에서 대부분의 낮 시간을 보낼 때 느린 습관보다 빠른 습관을 갖는 것이 더 좋습니다.
매크로를 사용 하여이 문제를 해결했습니다.
매크로 기록을 시작했습니다.
- 편집-매크로-매크로 기록 시작을 클릭하십시오.
- 파일-모두 저장을 클릭하십시오
- 빌드-프로젝트 만들기를 클릭하십시오.
- 편집-매크로-매크로 기록 중지를 클릭하십시오.
"SaveAndMake"와 같이 유용한 이름을 지정하십시오.
이제 모든 키 바인딩 저장을 제거하고 매크로에 동일한 키 바인딩을 추가하십시오!
이제 저장할 때마다 더티 컴파일을 저장하고 더티 컴파일하여 jRebel이 모든 변경 사항을 올바르게 감지합니다.
활성화하려면 다음 단계를 신중하게 따르십시오.
1) SB V1.3을 사용하여 Spring Boot 프로젝트를 작성하고 종속성에 "Devtools"(1 *)를 추가하십시오.
2) 도움말-> 조치 찾기 ...를 호출하고 "등록"을 입력하십시오. 대화 상자에서 "automake"를 검색하고 " compiler.automake.allow.when.app.running " 항목을 활성화하고 대화 상자를 닫으십시오.
3) 설정-> 빌드, 실행, 배포-> 컴파일러 "자동으로 프로젝트 만들기"에서 백그라운드 컴파일을 활성화하십시오.
4) Spring Boot run config를 열고 모든 것이 올바르게 구성되면 경고 메시지가 나타납니다.
5) 앱을 실행하고 수업을 즉시 변경하십시오.
이 문제에 대한 의견으로 경험과 문제를보고하십시오.
이것으로 영향을받은 maven 프로젝트에서 나를 위해 일한 유일한 것은 단위 테스트의 실행 구성에 "테스트 컴파일"목표를 추가하는 것입니다. 엄청나게 서투른 솔루션이지만 작동합니다.
다른 모듈에서 컴파일 문제가 발생하면 Intellij가 자동으로 실패한 후 자동 빌드가 수행되지 않습니다. 그래서 당신의 Problems
창을 확인
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.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
실행하기 전에 빌드 옵션이 선택되도록 실행 / 디버그 구성을 편집하십시오.
빌드 옵션이 선택된 후
위의 솔루션은 JBehave 테스트 스위트에서 작업하는 동안 저에게 효과적이었습니다.
나는 같은 문제가 있었다. "절전 모드"를 사용하여 증분 컴파일 및 컴파일 오류 표시를 방지했습니다.
기존 답변에 대해 언급 할 점이 충분하지 않지만 위의 일부 사람들과 유사하게 매크로 및 키 맵을 추가하여 Imports / Format / SaveAll / FastReload (F9) / Synchronize 구성 합니다.
동기화는 외부 빌드 도구 / 감시자 (예 : 웹 팩)에 의해 수정 된 리소스의 업데이트를 볼 수있는 유일한 방법 인 것처럼 추가되었습니다.
프로세스는 일식보다 느리며 외부 파일을 새로 고치려면 종종 명령을 여러 번 실행해야하지만 그와 함께 살 수 있다고 가정하십시오.
참고 URL : https://stackoverflow.com/questions/12744303/intellij-idea-java-classes-not-auto-compiling-on-save
'Programing' 카테고리의 다른 글
ConstraintLayout에서 요소를 가운데에 배치하는 방법 (0) | 2020.05.31 |
---|---|
UIWebView에 로컬 html 파일을로드하는 방법 (0) | 2020.05.31 |
변수 참조 만 참조로 반환해야합니다-Codeigniter (0) | 2020.05.31 |
혼합 면도기와 자바 스크립트 코드 (0) | 2020.05.31 |
웹킷 변환의 웹킷 전환시 깜박임 방지 (0) | 2020.05.31 |