개발/개발관련

[개발관련] Package name 'main.java.Algorithm. ... ' does not correspond to the file path 'Algorithm. ...'

mabb 2023. 8. 3. 14:36
반응형

 Gradle 프로젝트로 전환 후 인코딩 및 소스 디렉터리 변경에 의한 Package 선언 문제가 발생하였다.

Package name 'main.java.Algorithm. ... ' does not correspond to the file path 'Algorithm....'

정렬 알고리즘 공부 차원에서 코딩 중 테스트 코드나 써볼까 하고 JUnit 라이브러리를 추가하고자 하였다. 빌드 도구로 의존을 추가하는 것이 간편하다고 생각하여 build.gradle 파일을 추가하여 Gradle 프로젝트로 변경하였더니 제목과 같은 문제가 발생하였다. Gradle 프로젝트 변경 후 인코딩 관련 다른 문제도 발생하였었는데 다음과 같은 조치로 해결하였다.

-----------------------------------------------------------


1. build.gradle에 다음 코드 추가

tasks.withType(JavaCompile){
    options.encoding = "UTF-8"
}


2. help - edit Custom VM Options... 에 다음 코드 추가

-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8

3. File -Settings  'encoding'으로 검색하여 모두 UTF-8로 변경

4. inteliJ 재부팅

 

Gradle encoding 관련 설명

 

Solving common problems

Small problems in a build, like forgetting to declare a configuration file as an input to your task, can be easily overlooked. The configuration file might change infrequently, or only change when some other (correctly tracked) input changes as well. The w

docs.gradle.org

-----------------------------------------------------------

 

추가한 build.gradle은 다음과 같다.

apply plugin: 'java'

sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding = "UTF-8"

repositories{
    mavenCentral()
}

dependencies{
    // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.8.2'

}

tasks.withType(JavaCompile){
    options.encoding = "UTF-8"
}

 

디렉터리 구조는 다음과 같다. 알고리즘 연습용으로 생성한 프로젝트이다.

 

기존에는 package 선언을 main.java.... 하위 경로로 모두 작성하였는데 Gradle 프로젝트로 변경 후 문제가 발생하였다.

인텔리제이에서 해결책으로 제시하는 것은 
1. 패키지 이동
2. 알맞은 패키지 명으로 변경
인데 1번을 택할 경우 java 패키지 하위에 패키지를 생성해서 소스파일을 옮겨버린다...

 

2번을 택하면 다음과 같이 main.java를 제외한 패키지로 변경해 준다.

package Algorithm.recursive.folderandfile;

 

Gradle 프로젝트의 경우 src/main/java 경로를 기본적인 프로젝트 경로로 인식을 하는 것 같다.

apply plugin : 'java'

로 설정할 경우 다음의 경로를 프로젝트의 레이아웃으로 가정하게 된다.

src/main/java
src/main/resources
src/test/java
src/test/resources
src/sourceSet/java
src/sourceSet/resources

https://docs.gradle.org/current/userguide/java_plugin.html#java_plugin

Changing the project layout

You configure the project layout by configuring the appropriate source set. This is discussed in more detail in the following sections. Here is a brief example which changes the main Java and resource source directories.

 

프로젝트 레이아웃은 변경할 수 있다.

 

프로젝트 레이아웃의 소스 루트를 main/java로 하였다. 소스 루트로 인식하지 못하게 된다.
Java file outside of source root

 

 

srcDirs 를 'src'로 설정하였다.

 

main.java ... 경로의 패키지로 변경하도록 한다.

 

 

결론.

Gradle 프로젝트는 기본 소스 디렉터리를 src/main/java 로 사용하기 때문에 package 및 import 선언 시 java 하위의 패키지부터 작성하여야 한다. 세팅을 통해 기본 소스 디렉토리를 변경할 수는 있지만 Gradle의 관습을 그대로 사용하는 것이 좋다.

 

반응형