Study/Java

[Gradle] 두 개의 프로젝트를 하나로 프로젝트로 변경하며 gradle 설정

black6765 2022. 11. 28. 21:11

상황

  • 프로젝트를 시작할 당시에는 gradle을 사용하지 않았음
    • 프로젝트를 진행함에 따라 gradle을 적용하려고 함
  • 하나의 루트 프로젝트(CacheServerProject)와 두 개의 프로젝트(Server, Client)로 이루어짐
    • Server와 Client
    • 일반적인 gradle의 디렉토리 구조와 상이함
      • src/main/java와 같은 구조로 설계하지 않음
  • 이 두 개의 프로젝트를 유지하며 gradle을 사용하고자 함
    • Server와 Client 각각 jar 파일을 생성할 수 있어야 함

적용

  • gradle을 적용하기 위해서는 두 개의 gradle 관련 파일을 만들어야 함

    • build.gradle
    • settings.gradle
  • build.gradle

      plugins {
          id 'java'
      }
    
      group 'org.example'
      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()
      }
  • InteliJ에서 gradle로 프로젝트 생성시 초기에 주어지는 설정을 그대로 복사함

  • settings.gradle

      rootProject.name = 'CacheServerProject'
      include 'Server'
      include 'Client'
    • 처음에는 rootProject.name만 설정하였음
    • 여기에서 멀티 프로젝트의 이름을 기입하면 됨
      • include ‘[프로젝트 이름]’
  • 성공적으로 gradle을 적용한 후에 디렉토리 구조는 다음과 같음

    • CacheServerProject ⇒ Root Project
      • Client
        • src/main/java/com/blue/cacheserver
          • message
          • start
          • test
          • 이하 디렉토리 생략
        • build.gradle
      • Server
        • src/main/java/com/blue/cacheserver
          • cache
          • client
          • message
          • service
          • task
          • 이하 디렉토리 생략
        • build.gradle
      • gradle
      • .gitignore
      • build.gradle
      • gradlew
      • gradlew.bat
      • README.md
      • settings.gradle
  • gradle을 이용해 build 하게 되면 Client와 Server 디렉토리에 build 디렉토리가 생성됨

    • 하위의 libs로 가면 jar 파일이 생성되어 있음

    • 하지만 실행해보면 main-class를 찾지 못했다면서 실행되지 않음

    • 다음 내용을 Client, Server 프로젝트의 build.gradle에 추가

      • ex) Main Class의 경로가 com.blue.cacheserver.start.ClientMain 일 때

        jar {
          manifest {
              attributes 'Main-Class': 'com.blue.cacheserver.start.ClientMain'
          }
        }
      • 이 설정을 추가하면 정상적으로 main 클래스를 인식함