声明项目依赖
学习在 `build.gradle` 中为不同作用域和类型声明依赖的多种方式。
声明项目依赖 是 CoddyKit 上的免费 Groovy & Gradle: JVM Automation and Build Engineering 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 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()).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!
常见问题解答
「声明项目依赖」课时是免费的吗?
是的 — 「声明项目依赖」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 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,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Groovy & Gradle: JVM Automation and Build Engineering 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Groovy & Gradle: JVM Automation and Build Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「声明项目依赖」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Groovy & Gradle: JVM Automation and Build Engineering 课中编写并运行代码吗?
能。每节 Groovy & Gradle: JVM Automation and Build Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。