Intellij Spring 'Could not find or load main class' Caused by 'java.lang.ClassNotFoundException'

 

* 스프링 부트에서 'Gradle'이 아니 'Maven' 을 사용할 때 발생한 에러 입니다. (Gradle 도 동일할 수 있습니다.)

 

Maven 프로젝트 생성 및 개발 진행 중 특정 시점으로 소스를 롤백이 필요했습니다.

소스 롤백 후 start를 하는데 클래스를 찾을 수 없다는 에러가 발생 했고, 에러 해결 방법을 찾아 봤습니다.

 

아래와 같이 진행 해주세요.

1.Build 메뉴의 'Build Project' 또는 'Rebuild Project' 를 실행 해주세요.

(인텔리제이는 가끔 클래스를 최신화 하지 않기 때문에, build를 다시 해주세요.)

 

스프링 프로젝트를 진행 하다보면 IDE(이클립스 or STS 등) 을 사용 하는데, 

가끔씩 'Problems opening an editor. Reason: {project name} does not eixist' 에러가 발생 합니다.

2개 이상의 프로젝트가 맞물려 작동하는 계층 구조에서 상위 프로젝트를 import 하지 않았거나, 'Close Project' 된 경우 주로 발생 합니다.

 

1. 프로젝트 Close 여부. 아래 그림은 프로젝트가 closed된 경우입니다.

 

2. 프로젝트가 import 되지 않은 경우. import해주시면 됩니다.

 

3. import 했는데도 안 될때. (Gradle 이나 Maven 의 빌드를 우선 진행 하시고, 그래도 안되면 아래르 따라해주세요)

3-1. 프로젝트 -> 우클릭 -> Project Facets -> Convert to faceted form

 

3-2 . Application 체크 -> Apply and Close

스프링 프로젝트 사용 중  Could not run phased build action using Gradle distribution 'https://services.gradle.org/distributions/gradle-6.3-bin.zip'  에러가 발생 했습니다.

해당 문제는 gradle 버전이 맞지 않아 생기는 문제이며 C:\Users\{username}\.gradle\wrapper\dists 경로에서

그림 1과 같이 사용하지 않는 버전을 삭제 해주시고, 그림 2와 같이 필요한 버전을 다시 한 번 설정 해주세요.

wrapper를 사용 하시면 첫 번째 방법만 사용 하시면 됩니다.

 

그림 1
그림 2

 

 

'Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않습니다'

 

잘 돌아가던 서버가 수정도 안 했는데 404에러가 발생하면, 톰캣 서버 Web module 의 path를 수정 해주시면 됩니다.

* 현재 아래 그림의 수정이 완료된 상태입니다. 

아래 그림2-1 처럼 올려야 할 프로젝트를 선택 하고 edit를 눌러주세요. 그리고 필요한 path를 입력 하시면 됩니다.

Spring 프로젝트를 진행 중이시라면 ' / ' 로 하시면 됩니다.

 

ps. 그나저나 저 HTTP 에러 상태 페이지를 영어로 보여지게 할 수 없나요 ㅇ_ㅇ? 

(사진1)

Lombok을 사용하기 위해 pom.xml 에 라이브러리를 추가 하면 바로 사용 할 수 있다고 생각 했습니다.

그래서 당연히 위 (사진1)처럼 MemberEntity에서 선언된 bullder()가 정의 되지 않았다는 에러가 발생 했습니다.


Lombok 을 사용하기 위해서 생각보다 단순한 작업만 진행 해주시면 됩니다.

 

 

 

1. 우선 pom.xml에 아래 라이브러리 코드를 추가해주세요.


		
		
		
			org.projectlombok
			lombok
			true
		
		

 

 

 

2. 다운로드 경로에서 설치된 lombok-1.18.12.jar을 더블클릭해서 실행 해주세요.

(만약 클릭해도 압축 해제 창만 뜨면 아래처럼 cmd에서 실행 해주세요)

 

 

 

3. Eclipse를 사용하고 계시면 아래처럼 자동으로 바인딩된 상태로 'Install / Update'를 하시면 됩니다.

하지만 저는 STS를 사용하고 있으니 'Specify location'에서 STS.exe파일을 추가 해주시면 됩니다.

 

 

 

4. 원하시는 경로의 STS.exe 파일이 추가 됬는지 확인 하시고 'Install/Update'를 클릭하세하시고,

    다음 페이지는 무난하게 넘겨줍니다.

 

 

 

5. 설치 완료 후 STS및 이클립스를 재시작 해주시고 프로젝트 build를 해주세요. 

MemberEntity 클래스에 @Builder와 @Getter등 Lombok의 어노테이션이 정상적으로 작동해 bean등록이 되었습니다.

 

스프링부트는 스프링 프로젝트와 다르게, 동적 파일들의 refresh를 자동으로 반영 하지 않습니다.

처음에는 브라우저 캐쉬 문제가 있는줄 알고 개발자 모드로 실행했고, 캐쉬를 삭제하고도 실행 해봤습니다.

그렇게저는 F5를 키를 계속 누르고 있었죠ㅠㅠ

해당 부분은 pom.xml 에 아래 부분을 추가 해주시면 재시작 없이 refresh 할 수 있습니다.

 

 

pom.xml 과 application.properties에 각 소스 코드를 입력 해주시면 됩니다.

그리고 프로젝트 clean 및 서버를 재시작 하시면 jps파일을 서버 재시작 없이 바로 refresh할 수 있습니다 !

 

pom.xml

		
			org.springframework.boot
			spring-boot-devtools
		

 

 

application.properties

spring.devtools.liverload.enabled : true

매번 실무에서는 만들어져 있던 프로젝트를 import/pull 해서 사용 하다보니,

초기 프로젝트 세팅(프로젝트 생성 및 깃 저장소 연결) 을 직접 해본적이 없었습니다.

스터디를 위해 프로젝트를 만들다가 삽질을 하도 많이해서 시간낭비를 또 하지 않기 위해 블로그에 정리 합니다.

상세한 설명보다는 절차적으로 이미지로 표현 하였습니다.

 

 

 

1.  https://github.com 접속 및 회원 가입.

 

2. 'Start a Porject' 버튼 클릭 후 그림(2-1) 처럼 작성

그림(2-1)

 

 

 

3. 생성된 깃 저장소 링크 확인. (5번 항목에서 사용 됨)

 

 

 

 

4-1. STS 및 이클립스 실행 -> Window -> Show View -> Other... 선택 (그림 4-1)

4-2. Git Repositories 선택 (그림 4-2)

그림(4-1)
그림(4-2)

 

 

 

5-1. Git Repositories 항목 -> Clone a git repository 선택 (그림 5-1)

 - 항목이 없으면 Window -> Show View -> Other... 에서 검색

5-2 Location.Url 항목에 3번에서 생성된 Git Url 복사 및 붙여넣기 (그림 5-2)

5-3 next (그림 5-3)

5-4 Git 저장소를 선택 후 Finish (그림 5-4)

 

그림(5-1)
그림(5-2)
그림(5-3)
그림(5-4)

 

 

 

6. Git Repositories 항목에서 추가된 저장소를 확인 (그림 6-1)

그림(6-1)

 

 

 

 

7-1. 스프링 프로젝트 생성 (그림 7-1)

   New -> Spring Boot -> Spring Starter Project

7-2 설정 하고 싶은 정보 입력 (그림 7-2)

7-3 기본 설정을 위한 Spring Web 선택 (그림 7-3)

7-4 Finish (그림 7-4)

그림(7-1)
그림(7-2)

 

그림(7-3)

 

그림(7-4)

 

 

 

8. 생성된 프로젝트 확인

 - unknown 에러 발생시 해당 링크 참조 https://gabrielyj.tistory.com/178

그림(8-1)

 

 

 

9-1. 프로젝트 우클릭 -> Team -> Share Project (그림 9-1)

9-2. 부모 디렉토르 확인 후 Finish 

 

그림(9-1)
그림(9-2)

 

 

 

 

10. Git 저장소와 연동된 프로젝트를 확인. '프로젝트 이름[깃 저장소 이름]'

 

 

11-1. 프로젝트 파일 깃 저장소로 Commit 하기 위해서 , Unstaged Changes 파일들을 Staged Changes 로 보내기

        파일 선택 -> 우클릭 -> Add  to index (그림 11-1)

11-2 Staged Changed 된 파일 확인 (그림 11-2)

11-3 Commit message 작성 (그림 11-3)

11-4 커밋 작업 후 깃 저장소로 Push (그림 11-4)

11-5 마스터 브랜치 확인 후 머지 및 Finish 확인

11-6 최종 메세지 확인 후 종료

그림(11-1)
그림(11-2)
그림(11-3)
그림(11-4)
그림(11-5)
그림(11-6)

 

 

 

12. Github 홈페이지에서 커밋 내용 확인 (그림 12-1)과 (그림 12-2) 처럼 최근 커밋 내용이 출력

그림(12-1)
그림(12-2)

스프링 프로젝트를 처음 생성 했는데, unknown 에러가 발생하여 난감하신 분들이 많다고 생각됩니다.

아래 그림(1-1), 그림(1-2) 같은 에러가 발생 하는 분들에게 도움이 되고자 포스팅 합니다.

 

해당 문제는 막 생성된 maven을 생성 할 수 있게 pom.xml 에 등록을 해주시면 쉽게 해결 됩니다.

 

 

그림(1-1)
그림(1-2)

 

 

 

1. https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin 

   해당 URL에서 사용 하고 싶으신 플러그인 버전을 선택 해주세요.

 

Maven Repository: org.apache.maven.plugins » maven-jar-plugin

Builds a Java Archive (JAR) file from the compiled project classes and resources. VersionRepositoryUsagesDate3.1.x3.1.2Central 0 May, 20193.1.1Central1Dec, 20183.1.0Central5Apr, 20183.0.x3.0.2Central10Jun, 20163.0.1Central 0 Jun, 20163.0.0Central 0 May, 20

mvnrepository.com

 

 

 

2. pom.xml 의 <properties>에 아래와 같이 추가 해주고, 해당 jar파일이 다운로드 될 때까지 기다려 주세요.

	
	
		3.1.1
		1.8
	

위에 글이 깨지시는 분은 아래 텍스트를 추가 해주세요 !

<properties>  <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties>

 

 

 

3. 우선 pom.xml 에 에러가 해결된것을 확인 하실 수 있지만, 여전히 프로젝트 아이콘에는 에러 표시가 존재 합니다.

그림(3-1)

 

 

4. 'Problems' 항목에서 해당 에러를 확인 후, 그림2, 3과 같이 우클릭 -> 'Quick Fix' -> 'Finish' 버튼을 눌러주세요. 

(못 찾으시면, 상단 Window -> Show View -> Problems 를 선택 해주세요)

그림(4-1)
그림(4-2)
그림(4-3)

 

 

 

5. 해당 과정을 완료 하시면 그림(5-1) 같이 모든 에러가 해결 됬음을 확인 하실 수 있습니다.

그림(5-1)

 

안녕하세요, 지난주 까지 스프링+Maven 프로젝트를 진행 하고 있었는데, 갑작스럽게 스프링부트+Gradle을 진행하게 되었습니다.

회사에 계신 사수분이 지금 환경을 더 잘 한다고 하셔서 많이 배우고자 변경 하게 되었습니다.


Gradle는 Ant 와 Maven 의 장점을 합쳐 만든 빌드 도구이며 4.x 버전 이후로 개발에 최적화가 진행 되었다고,

빠른 빌드 속도, 동적 요소 관리 유연, 코드 길이와 가독성이 좋은 등 여러가지 장점이 있다고 합니다.




저는 이클립스 기반의 STS를 이용 해서 프로젝트를 생성 하겠습니다.

STS설치, JDK설치 및 설정은 제가 작성한 포스트를 따라 해주시면 됩니다.



1-1. STS 설치는 아래 링크에서 필요한 버전을 다운 받아주세요, 저는 3.9.6 버전을 사용 설치 하였습니다.

https://spring.io/tools3/sts/legacy


1-2. JDK 다운 및 환경 변수 설정

https://gabrielyj.tistory.com/162?category=629044








2. File -> New -> Spring Starter Project










3. 이 부분에서는 프로젝트의 환경 설정을 해주게 됩니다


Service URL : 해당 프로젝트가 다운로드되는 URL 입니다. 프로젝트 생성 Finish 때 연동 됨

Name : 프로젝트 명을 선택, 원하시는 내용으로 네이밍 하셔도 됩니다.

Type : 빌드 방식 설정, Maven이나 Gradle 방식 선택. 선택 방식에 따라서 프로젝트의 구조가 변경 되게 됩니다. 

Packaging : Jar는 embeded 톰캣(내부) 를 사용하고 War는 외부 톰캣을 사용합니다. 기존 Spring의 서버 사용 방식과 똑같습니다.

Java Version : 현재 사용 중인 자바 버전 선택

Language : 프로젝트의 개발 언어 선택

Group / Package : 그룹 및 패키지명을 선택, 원하시는 내용으로 네이밍 하셔도 됩니다.










4. 프로젝트에서 사용될 라이브러리를 시작 하기전에 설정 할 수 있습니다.

하지만 기존 스프링의 Maven 에서는 pom.xml 에 사용자가 원하는 라이브러리를 언제든지 추가가 가능 한 것 처럼,

그레이들에서도 프로젝트 생성 후에 아무때나 추가 할 수 있습니다. 저는 우선 아무것도 선택하지 않고 진행 하겠습니다.










5. 3번 스텝에서 선택된 정보를 바탕으로, 입력된 url 을 통해 zip파일을 내려 받으며 다운로드 완료 후 자동으로 임포트 됩니다.

페이지에서 직접 받게 되시면 zip파일을 다운/압축 해제 후 워크스페이스에 임포트 하시면 됩니다.









6. 생성 완료 후 프로젝트의 구조를 확인 할 수 있습니다.

우선 프로젝트 실행을 한 번 시켜 본 후 , 각 폴더 및 파일의 설명은 다음 포스트에서 진행 하겠습니다.

src/main/java 패키지에 TestController.java 클래스를 만드신 후 아래 간단한 컨트롤러 코드를 입력 해주세요.


package com.theblack.page;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
	@RequestMapping(value="/")
	public String testMethod() {
		return "HelloWorld";
	}
}







7. Run -> Run As -> Spring Boot App 을 실행 하신 다음, 인터넷 창에 localhost:8080 및 설정하신 포트를 입력 해주시면,

아래 첨부된 그림처럼 HelloWorld 가 표시 되는것을 확인 하실 수 있습니다. 










간단하게 필요한 라이브러리에 대해서 설명 드리자면,

Mybatis 생산성/유지보수/성능/이식성을 향상 시키고, 간단하게 DB 사용을 지원 해주는 오픈소스입니다

Mybatis-spring는 하나의 모듈로써 Mybatis와 Spring를 연결 해주는 역할을 합니다.

jdbc는 자바와 데이터베이스의 연결을 해주는 역할을 합니다.

dbcp 디비의 연결을 미리 예측하고 일정 갯수의 connection을 유지하는것 입니다.(효율적인 db사용 가능)


첫 번째로 pom.xml 에 Mybatis, MyBatis-spring 을 추가 해주세요. 각 버젼 확인은 아래 url 에서 해주세요

Mybatis - https://mvnrepository.com/artifact/org.mybatis/mybatis

Mybatis-Spring - https://mvnrepository.com/artifact/org.mybatis/mybatis-spring

spring-jdbc - https://mvnrepository.com/artifact/org.springframework/spring-jdbc

spring-dbcp - https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp


저는 3.4.6(Mybatis) , 2.0.0(Mybatis-Spring), 5.0.0(spring-jdbc), 1.4(commons-dbcp) 을 사용 하겠습니다.



		
		
		
			org.mybatis
			mybatis-spring
			2.0.0
		

		
		
			org.mybatis
			mybatis
			3.4.6
		


		
		
			org.springframework
			spring-jdbc
			5.1.0.RELEASE
		

		
		
			commons-dbcp
			commons-dbcp
			1.4
		




라이브러리 등록이 완료되면 root-context.xml 파일을 설정해야 합니다. 이 파일은 웹과 관련 없는 나머지 객체(bean)을 설정 해줍니다.

원래는 web.xml 최초 서버가 실행될 때 이 파일을 참조 할 수 있게 설정을 해야 하는데, 스프링 프로젝트 생성시 자동으로 입력 됩니다.



	contextConfigLocation
	/WEB-INF/spring/root-context.xml



DB 연결하는 부분은 웹이 아니기 때문에 이부분에서 설정을 해줍니다. (웹은 servlet-context)

아래 항목 중 Namespace를 누르시면 Configure Namespaces 화면을 확인 하실 수 있습니다.

 aop, bean, context, mybatis-spring을 체크 해주세요. 체크를 하시면 아래 그림과 같이 자동으로 bean의 경로가 설정 됩니다.









자동 입력된 root-context.xml 파일에서 주석 밑에 DB접속 정보를 입력 해주시면 됩니다. 

mariadb 는 mysql jdbc를 이용해서 접근이 가능합니다. 찜찜하신 분들은 mariadb jdbc를 사용 해주시면 됩니다.

그리고 dataSource의 destory-method 는 bean 객체의 스코프가 종료될 때 선언된 클래스를 종료하기 위해 close()메소드를 실행 합니다.



	
	
	
      
      
      
      
      
   

   
	
      
      
      
	
    
    
	
      
	
 	



root-context.xml 에 데이터 베이스 관련 정보들을 입력 하신 다음에 아래와 같이 src/main/resources 폴더에

 config, mappers 폴더를 만들어 주세요.

config 폴더에는 mybatis-config.xml 파일을, mappers 폴더에는 testMapper.xml 파일을 생성 해주세요.

각 폴더 및 파일을 생성 하신 다음 아래 내용을 해당 파일에 복사해서 붙여 넣어주세요 !!!

원래 하나의 파일에 설정을 할 수 있지만 저는 다른 config 파일들이 추가 될 예정이라서 효율적인 관리를 위해 따로 등록 하였습니다.






이 두놈은 syntaxHighlight 가 도저히 먹히지 않습니다ㅠㅠ 


(mybatis-config.xml)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration></configuration>



(testMapper.xml)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


  <mapper namespace="mapper">

  

  </mapper>









여기까지 스프링 프로젝트의 DB설정 및 Mybatis 연동이 끝났습니다.

다음 포스트 부터 실제 mybatis를 이용해서 데이터를 불러오고 입력하는 예제를 진행 해보겠습니다.

감사합니다 :)



+ Recent posts