예를 들어, Intellij 에서 직접 External Libraries 또는 어떤 객체의 사용 위치를 참조하여 파일을 살펴볼 때 아래와 비슷하게 메세지가 나타나는 경우가 있다.
Decompiled .class file, bytecode version: 57.0 (Java 13)
보통 개발을 하면서 문제가 생겼을 때 디버깅을 찍어보면서 Spring 과 같은 다른 라이브러리의 내부 코드를 들여다보던지 아니면 평소대로 라이브러리에서 지원하는 메서드를 사용하려고 할 때 주석이라던지를 참조를 하게 되는데 자기가 직접 스스로 라이브러리를 만들면서 Maven 또는 직접 운영하는 Nexus 에 라이브러리를 등록하여 사용을 할 때 만약 아무런 빌드 옵션을 주지 않고 등록을 하게 되면 위와 같이 바이트 코드만 볼 수 있게 된다.
gradle 기준으로 위 문제는 아래와 같이 배포를 할 때 artifact 로 sources Jar 를 같이 첨부를 해야 해결할 수 있다.
task sourceJar(type: Jar) {
from sourceSets.main.java.srcDirs
classifier('sources')
}
if (project.hasProperty('username') && project.hasProperty('password')) {
publishing {
publications {
maven(MavenPublication) {
from components.java
artifact sourceJar
}
}
repositories {
maven {
url repoUrl
allowInsecureProtocol(false)
credentials {
username project.property('username')
password project.property('password')
}
}
}
}
}
bootJar.enabled(false)
jar {
enabled(true)
// Spring 라이브러리를 참조할 경우 plain 이 붙기 때문에 삭제를 해줘야 함
// https://stackoverflow.com/questions/67663728/spring-boot-2-5-0-generates-plain-jar-file-can-i-remove-it/67752182#67752182
classifier('')
}
만약, 그 후에 특정 프로젝트에서 라이브러리를 사용할 때 아래와 같이 바이트 코드와 실제 코드가 서로 맞지 않다고 나타나면
Library source does not match the bytecode for class
Intellij > Files > Invalidate Caches... > Restart
를 통해서 캐시값을 지우고 다시 시도해보자
'프로그래밍 > Spring' 카테고리의 다른 글
[JPA] QueryDSL 에서 문자열을 숫자로 뽑아서 변환하기 (0) | 2022.10.24 |
---|---|
[JPA] Oracle 을 사용해서 Native Query 로 출력 개수까지 다 가져와보기 (0) | 2022.10.17 |
[JPA] H2 DDL 초기 테스트 데이터 설정 (0) | 2022.10.01 |
[Spring] Kafka 이용 시 __TypeId__ 에 대하여 (0) | 2022.08.02 |
[Spring] @ModelAttribute 파라미터에서 사용 방법 및 원리 (0) | 2022.07.30 |