0Pricing
Groovy & Gradle: JVM Automation and Build Engineering · 강의

프로젝트 의존성 선언

다양한 범위와 타입에 맞춰 `build.gradle`에서 의존성을 선언하는 여러 방법을 배웁니다.

프로젝트 의존성 선언은(는) CoddyKit의 무료 Groovy & Gradle: JVM Automation and Build Engineering 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Groovy & Gradle: JVM Automation and Build Engineering 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Groovy & Gradle: JVM Automation and Build Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

Project Needs & Dependencies

Modern software projects rarely work in isolation. They often rely on external code, known as dependencies, to perform various tasks.

Think of dependencies as pre-built tools or libraries that save you from writing common functionalities from scratch, like logging, parsing JSON, or connecting to a database.

  • Libraries: Collections of code (e.g., Apache Commons).
  • Frameworks: Structured foundations for applications (e.g., Spring Boot).
  • Modules: Components of a larger system.

Gradle's `dependencies` Block

In Gradle, you declare all your project's dependencies within a dedicated dependencies { ... } block in your build.gradle file.

This block is central to managing what your project needs to compile, test, and run.

/* build.gradle */

plugins {
  id 'java'
}

repositories {
  mavenCentral()
}

dependencies {
  // Your dependencies go here!
}

Where Gradle Finds Dependencies

Before Gradle can fetch dependencies, it needs to know where to look. This is defined in the repositories { ... } block.

The most common repository is Maven Central, a vast public repository for Java libraries. By declaring mavenCentral(), you tell Gradle to search there.

/* build.gradle */

repositories {
  // Tells Gradle to look for dependencies in Maven Central
  mavenCentral()
}

`implementation`: The Standard

The implementation configuration is your go-to for most production dependencies. It adds the dependency to the compilation classpath and also to the runtime classpath.

Crucially, implementation dependencies are not exposed to other modules that consume your project, which helps with faster compilation and better encapsulation.

/* build.gradle */

dependencies {
  // Adds SLF4J API for logging, used during compile and runtime
  implementation 'org.slf4j:slf4j-api:1.7.30'
}

Example: Using `implementation`

Let's see a simple Java class that uses a library added with implementation. We'll add the Apache Commons Lang library for string utilities.

/* build.gradle */

plugins {
  id 'java'
}

repositories {
  mavenCentral()
}

dependencies {
  implementation 'org.apache.commons:commons-lang3:3.12.0'
}

/* src/main/java/App.java */

import org.apache.commons.lang3.StringUtils;

public class App {
  public static void main(String[] args) {
    String text = "  Hello CoddyKit  ";
    System.out.println(StringUtils.trim(text));
  }
}

`testImplementation`: For Testing Only

Dependencies needed only for running tests (like JUnit 5 or Mockito) should be declared with testImplementation.

These dependencies are added to the test compilation and runtime classpaths but are not included in your final application artifact or exposed to production code.

/* build.gradle */

dependencies {
  // Adds JUnit 5 for unit testing
  testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
  testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

`runtimeOnly`: Just for Running

Sometimes, a dependency is only needed when your application actually runs, not during compilation. This is where runtimeOnly comes in.

A common use case is a JDBC driver. Your code compiles against the JDBC API (which is often part of Java or a compileOnly dependency), but the specific driver (e.g., HSQLDB, PostgreSQL) is only needed at runtime.

/* build.gradle */

dependencies {
  // JDBC driver for HSQLDB, only needed when the app runs
  runtimeOnly 'org.hsqldb:hsqldb:2.5.1'
}

`compileOnly`: Compile-Time Helpers

Use compileOnly for dependencies that are required during compilation but should not be packaged with your final application or available at runtime.

Examples include annotation processors like Lombok, or API specifications (e.g., Servlet API) when your application will run in an environment that already provides them.

/* build.gradle */

dependencies {
  // Lombok for reducing boilerplate code, not needed at runtime
  compileOnly 'org.projectlombok:lombok:1.18.20'
  annotationProcessor 'org.projectlombok:lombok:1.18.20'
}

Local Files as Dependencies

While generally discouraged, you might sometimes need to include a local JAR file that isn't available in any public repository (e.g., a proprietary library).

You can declare these using the files() method within the dependencies block. Make sure the path is correct relative to your project root.

/* build.gradle */

dependencies {
  // Includes a JAR file located in the 'libs' folder
  implementation files('libs/my-custom-lib.jar')
}

Dependency Configuration Quiz

You are building a web application and need to include:

  • A logging library for all code.
  • JUnit 5 for unit tests.
  • The Servlet API, which your application server already provides.

Which Gradle dependency configurations would you use for these three items?

Recap: Declaring Dependencies

Great job! You've learned the essentials of declaring dependencies in Gradle:

  • The dependencies { ... } block is where you list all external libraries.
  • repositories { ... } tells Gradle where to find these libraries (e.g., mavenCentral()).
  • implementation for most production code.
  • testImplementation for test-specific libraries.
  • runtimeOnly for dependencies only needed at runtime.
  • compileOnly for compile-time only dependencies not packaged.
  • You can also include local JARs using files().

Understanding these configurations helps you build efficient and well-structured projects!

자주 묻는 질문

“프로젝트 의존성 선언” 강의는 무료인가요?

네 — “프로젝트 의존성 선언” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Groovy & Gradle: JVM Automation and Build Engineering 강의 전체를 잠금 해제할 수 있습니다. Groovy & Gradle: JVM Automation and Build Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

“프로젝트 의존성 선언”에서 뭘 배우나요?

다양한 범위와 타입에 맞춰 `build.gradle`에서 의존성을 선언하는 여러 방법을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 Groovy & Gradle: JVM Automation and Build Engineering을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Groovy & Gradle: JVM Automation and Build Engineering을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Groovy & Gradle: JVM Automation and Build Engineering은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“프로젝트 의존성 선언” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Groovy & Gradle: JVM Automation and Build Engineering 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Groovy & Gradle: JVM Automation and Build Engineering 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 프로젝트 의존성 선언
  2. 의존성 해결과 캐싱
  3. 사용자 지정 저장소와 BOM
  4. 버전 충돌과 의존성 제약 해결
← Groovy & Gradle: JVM Automation and Build Engineering(으)로 돌아가기