개발 일기

[Editor -> File Type ] 인텔리제이에서 특정 클래스가 인식 되지 않을 때 본문

Java&Spring/Project

[Editor -> File Type ] 인텔리제이에서 특정 클래스가 인식 되지 않을 때

flow123 2022. 7. 8. 00:27

동료의 프로젝트를 열었는데, 특정 이름의 파일명(MarketGolaApplication) 인식 되지 않는 이슈가 있었다.

보통 import 등의 이슈가 있을 때는, 롬복을 못읽어오거나 특정 클래스가 빨간 줄로 표시되지만,

아래 이미지처럼 파일을 아예 읽지 못했다

 

원인은 Editor -> File Type 에 있었는데, 이 기능이 존재하는 줄 몰라서 파악이 오래 걸렸다. 

나와 같은 삽질을 하는 분이 없었으면 하는 마음으로 기록해둔다. 문제/시도해본 것들을 건너 뛰고, 해결방법부터 읽으셔도 좋다. 

문제

동료와 같은 Repository에서 작업하고 있었는데, 특정 폴더 구조와 rootProject 등의 구조가 조금 다른 상황이었다.

브랜치 간의 충돌인가 싶어, 아예 동료의 브랜치만 zip 파일을 다운 받아보았다. git clone 도 새 폴더에 해보았는데 여전히 해당 파일이 읽히지 않았다. 클래스를 직접 만들어주면, 메인 클래스를 실행할 수 있었다. 

 

시도해본 것들  (빌드 에러로 착각했을 때) 

(1)JDK 버전 차이를 확인해본다.

동료: jdk 11.0.15  / 나: 11.0.13  였다. 

이는 미미한 차이어서 원인이 아닌 것 같았다. 

 

(2) 빌드를 다시함. 

-idea 파일을 지우고

-invalidate cache 하고 clean build 를 하고 gradle을 reload 했다. 

 

(3) 자바 파일을 직접 띄워서 실행해보았을 때는 문제 없이 잘 작동했다. 따라서 인텔리제이의 문제에 가까워보였다. 

명령어는 아래 참고 

java -jar .\"jar 파일 이름을 넣으면 된다.따옴표 빼고"\
//java -jar .\market-gola-0.0.1-SNAPSHOT.jar\

 

(4)  src 폴더를 Mark Directory as a source root 로 지정

-> 동일 디렉토리 위치에 인덱싱이 안되는 파일이름이 아니라, 'Main Class' 등 다른 이름으로 만들었을 때는 잘 실행 되기 때문에, 소스루트의 문제는 아니라고 판단했다. 

(5) Edit Configurations 에서 직접 클래스를 매칭시도 (인덱싱이 안된 자바 파일이어서인지 파일 지정이 아예 불가했다)

 

 

해결 방법 ( Editor -> FileTypes) 

여기까지 시도해보고 파일 명이 문제의 원인이구나 싶었는데,  답은 Editor -> FileTypes 에 있었다.

Editor의 FileType에 생각지도 못한 파일들이 들어가 있었다. 문제의 파일 명인 MarketGolaApplication.java 도 포함되어 있다.  

이름을 제거해주면, 잘 실행된다. 해당 파일을 text 로 잘못 읽어오고 있었기 때문에, 이를 해제해주면 원래 확장자인 java 를 잘 읽어온다. 

 

왜 java 파일을 text 로 읽어오고 있었을까? 

먼저 인텔리제이의 FileType에 대해서 잠깐 짚어보자. 

 

File Type이란?

For language-specific features (such as syntax highlighting and code analysis) in files representing different languages and technologies, IntelliJ IDEA maintains a list of file types, each of which links a language service with one or more filename patterns.

https://www.jetbrains.com/help/idea/creating-and-registering-file-types.html

 

각 언어마다 코드 분석, 구문 강조 (Syntax highlighting: 코드 가독성 향상을 위해 글꼴, 색 등을 입히는 것) 하는 방식이 다르다. 그래서 인텔리제이에서는 일련의 파일 타입을 지원한다. 이때 파일 이름 패턴을 기반으로 (ex.xml) 파일 타입을 언어에 지원되는 서비스를 인식하게 된다. 좌측의 Recognized File Types 는 인텔리제이가 기본으로 제공해주는 타입들이다. 이 타입 외에 별도의 파일 이름을 등록하고 싶을 때, File name patterns 를 직접 등록하면  된다. 

 

 

그런데 이 에러가 도대체 왜 생겼을까? 에러도 손을 타는 것인가?  헨니님 블로그에서 잘 써주셔서 힌트를 얻었다!   해당 파일을 다루는 과정에서 text 로 auto-detect file type을 지정하는 옵션을 클릭했고,  자바 클래스가 아닌 text 로 인식했다 (정확한 원인은 모르지만, 아마도 import, build를 하는 과정에서 파일 인식이 안되서 이를 해결하는 과정에서 이것 저것 시도해보다, 실수로  open matching files as text and auto-detect file by content 옵션으로 파일을 등록한 것 같다) 

 

 

시험해보고자 test 라는 이름으로 파일을 만들어보았다. 확장자없이 등록하면, 파일을 인식하지 못해서, 아래 팝업이 뜬다. 빨간 박스로 된 선택지를 클릭하고

File Types를 다시 들어가보면 방금 추가한 test 파일이 추가된 것을 확인할 수 있다. 

참고로 아래 open matching files in intellij IDEA 옵션으로 하면, FILE TYPE이 새로 추가되지 않는다. 

 

결론적으로, 내 상황에서는 Open matching files as text and auto-detect file type by content 로 적용해서는 안됐다.

혹시 비슷한 상황이시라면,  File types -> File type auto-detected by file content -를 눌러서 파일을 제거해주면, 파일명을 잘 읽어온다. 문제의 파일명을(MarketGolaApplication) 잘 읽어온다. 

 

 

 

 

참고

 

-(검색어: java file not recognized) 

https://stackoverflow.com/questions/15915202/intellij-not-recognizing-a-particular-file-correctly-instead-its-stuck-as-a-te

-https://www.jetbrains.com/help/idea/creating-and-registering-file-types.html

Comments