Объявление зависимостей проекта
Изучите различные способы объявления зависимостей в `build.gradle` для разных областей применения и типов.
«Объявление зависимостей проекта» — бесплатный урок Groovy & Gradle: JVM Automation and Build Engineering на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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()).implementationfor most production code.testImplementationfor test-specific libraries.runtimeOnlyfor dependencies only needed at runtime.compileOnlyfor 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) и разблокировать остальной курс Groovy & Gradle: JVM Automation and Build Engineering, подпишись на CoddyKit PRO. Курс Groovy & Gradle: JVM Automation and Build Engineering содержит 4 уроков всего.
Чему я научусь в уроке «Объявление зависимостей проекта»?
Изучите различные способы объявления зависимостей в `build.gradle` для разных областей применения и типов. Ты практикуешь Groovy & Gradle: JVM Automation and Build Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Groovy & Gradle: JVM Automation and Build Engineering?
Предыдущий опыт не требуется. Groovy & Gradle: JVM Automation and Build Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Объявление зависимостей проекта»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Groovy & Gradle: JVM Automation and Build Engineering?
Да. Каждый урок Groovy & Gradle: JVM Automation and Build Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Объявление зависимостей проекта
- Разрешение зависимостей и кэширование
- Пользовательские репозитории и BOM
- Разрешение конфликтов версий и ограничения зависимостей