공부기록/스프링

Spring(boot) project pom.xml/build.gradle 작성

gyungmean 2024. 4. 16. 09:18

https://start.spring.io/

로 진행하지 않고 직접 build.gradle과 pom,xml파일을 작성해본 본 기록

 

Spring project pom.xml

먼저 sts로 maven project의 pom.xml에 직접 스프링 프레임워크를 적용해보자.

링크에 접속한다.

https://mvnrepository.com/

spring context 검색하면 여러가지 결과가 뜨는데 이 중 맨 위의 것을 선택했다.

 

6.1.3버전을 선택하면 아래와 같은 화면이 나오는데 maven부분에 있는 코드를 복사해준다.

pom.xml의 dependencies사이에 복붙해주면 완료

<properties>
		<java-version>17</java-version>
		<org.springframework-version>6.1.3</org.springframework-version>
		<com.mysql-version>8.2.0</com.mysql-version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
		<!--
		https://mvnrepository.com/artifact/org.springframework/spring-context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<version>${com.mysql-version}</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
</dependencies>

properties로 버전을 따로 빼주고 위와같이 관리하는 방법도 있다.

DB연결을 위해서 spring-jdbc랑 mysql 관련 의존성도 추가해주었다.

잊지말고 alt+f5로 maven update해주기!

 

Springboot Project build.gradle

이번엔 인텔리제이로 스프링부트 프로젝트를 만드는데 gradle로 build.gradle을 직접 작성해보자.

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 이 책을 참고 했다.

plugins {
    id 'java'
}

group 'com.practice.springboot'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

test {
    useJUnitPlatform()
}

우선 인텔리제이에서 Gradle을 선택해 프로젝트를 생성하면 기본으로 작성되어 있는 파일이다.

이 파일의 맨 앞부분에 다음과 같은 코드를 작성한다.

buildscript

buildscript{
    ext{
        springBootVersion = '2.1.7.RELEASE'
    }
    repositories{
        mavenCentral()
        jcenter()
    }
    dependencies{
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
  • buildscript : 별도의 외부 라이브러리를 가져올 때 사용한다.
  • ext : build.gradle에서 사용하는 전역변수를 설정한다. springBootVersion을 2.1.7.RELEASE로 선언한다는 의미
  • repository : 해당 프로젝트에서 사용하는 라이브러리를 어떤 원격 저장소에서 받을지를 지정한다. 기본적으로 mavenCentral을 많이 사용하지만 최근에는 라이브러리 업로드 난이도 때문에 jcenter를 많이 사용한다고 한다. mavenCentral은 본인이 만든 라이브러리를 올리려면 많은 과정과 설정이 필요하기 때문에 이곳에 공유를 하지 않는 문제점이 발생했다. jcenter는 이런 문제점을 개선해 라이브러리 업로드가 간단해졌고 여기에 코드를 올리면 mavenCentral에도 업로드가 되도록 자동화 되어있다고 한다. 여기서는 두개 다 등록되어있다.
  • dependencies : 위에서 지정한 레파지토리에서 찾을 라이브러리 명을 입력한다. 여기서는 spring-boot-gradle-plugin에 위에서 선언한 변수로 버전을 넣어주고 있다.spring-boot-gradle-plugin을 앞서 선언한 변수 springBootVersion로 사용 중이다. 2.1.7.RELEASE를 의존성으로 받겠다는 의미이다.
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

io.spring.dependency-management는 스프링 부트의 의존성을 관리해주는 플러그인이다.

나머지는 자바와 스프링부트를 사용하기 위해 필요한 플러그인

sourceCompatibility = 1.8

repositories{
    mavenCentral()
}

dependencies{
    compile('org.springframework:spring.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

나머지 코드들에서 지정해주는 repositories는 기본으로 사용할 레파지토리를 지정하고

dpendencies에서는 프로젝트 개발에 필요한 의존성을 선언한다.

파일을 수정하면 이러한 버튼이 생기게 되는데 여기 위에 있는 코끼리를 눌러주면 적용이 된다.

 

그런데 에러가 발생했다.

Unresolved reference: ext 

지피티한테 물어보고 따옴표도 ''에서 ""로 바꿔보고 별짓을 다했는데 해결이 안됐다.

어이없게도 문제점은

여기서 GradelDSL을 아무생각 없이 코틀린으로 설정해준게 문제였다.

Gradle DSL에 대해서는 조금 더 공부하고 따로 글을 쓰겠다. 아무튼 코틀린은 gradle 5.0부터 지원을 하게 되었고 그래서 책과 다르게 이런 선택창이 있었던거 같다.

둘은 문법이 다르기 때문에 내가 변수로 선언해준 ext부분을 못 읽고 자꾸 오류가 발생했던것이다.

Groovy로 다시 생성완료.

 

이번에는 새로운 문제에 직면했다.

'void org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact.<init>(org.gradle.api.tasks.bundling.AbstractArchiveTask)'

라고 계속 떠서 찾아보니 내가 책을 보고 작성한 저 버전의 스프링 부트와 현재 gradle버전이 맞지 않아서 발생한 문제였다. 버전을 2.4.5로 높여주자 해결이 됐다.

그래서 최종적으로 작성된 build.gradle은 다음과 같다.

buildscript {
    ext {
        springBootVersion = '2.4.5'
    }
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
    }
}

plugins {
    id 'java'
    id 'eclipse'
    id 'org.springframework.boot' version '2.4.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}

group 'com.practice.springboot'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 gradle을 확인해보면 스프링부트가 잘 적용된 모습을 확인할 수 있다.

 

직접 설정 파일을 작성해주다 보니까 뭐가 어떤 버전을 지원하고 안하고 이걸 찾아보게 돼서 어렵게 느껴지긴 했다.

이래서 직접 작성해보는 과정이 필요한가보다라고 느꼈다.