# Java Project Requirements
* Compile Java classes from .java into .class file.
* Manage resources that live alongside code.
* Package everything into a jar file.
* Run tests.
* Define decencies.
# Gradle Java Plugin
Plugin adds support for Java to meet all the specified requirements listed above. It configures projects in a certain way & adds additional tasks.
```
plugins {
java
}
```
## Compiling Classes
* Java plugin adds a compileJava task that uses the Java installed int he system to compile .java into .class files.
* Output .class files are outputted to build directory.
* `./gradlew compileJava`
![[gradle-compile-output-location.png]]
## Managing Resources
* Java plugin adds processResources task that copies contents of resources directories into build directory.
* `./gradlew processResources`
![[gradle-resources-output-location.png]]
## Package Into Jar File
* Java plugin adds a jar task that packages compiled classes and resources into a jar file.
* The name of the jar file is `<project-name>-<version>.jar`
* `./gradlew jar`
![[gradle-jar-output-location.png]]
## Running Tests
* Java plugin adds a test task that compiles tests, processes resources, and runs tests.
* Creates a test report in the build directory.
* `./gradlew test`
## Define Dependencies
* Use the dependencies section of `build.gradle.kts`
* Dependencies can be defined in different configurations. Therefore, it is important to set the right configuration because it is used to generate the `classpath`. The `classpath` is used by java so it knows about all the classes required during code compilation and execution.
* `implementation` is for dependencies required during compilation and execution of the code.
* `testImplementation` is for dependencies required during compilation and execution of tests.
![[project-dependencies-showcase.png]]
# Gradle Project Layout
![[gradle-project layout.png]]