Apache Tomcat) 가 인식할 수 있도록 패키징을 해주는 빌드 과정 즉 빌드 자동화 도구 이다.특장점으로는 별도의 패키지 관리가 필요 없다. 여러 라이브러리의 의존성과 관리를 자동으로 해주기 때문에 편리하다는 장점이 존재
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
Apache 의 Ant가 뭘까?
=> 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다. 톰캣을 빌드하기 위한 도구로서 만들어 짐
참고 : https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EC%95%A4%ED%8A%B8
implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.2.4.RELEASE'
-> 2개 이상의 프로젝트에서 동일한 캐시 사용 시 서로 overwrite 되지 않도록 checksum 기반의 캐시를 사용, 그리고 캐시를 repository 와 동기화 시킬 수 있다.
=> 성능 측면에서는 모두 다중 모듈 빌드를 병렬로 실행 할 수 있지만, Gradle은 task가 업데이트 되었고 안되었고를 체크하기 때문에 incremental build 를 허용한다.
incremental build: 반복적인 빌드 과정에서 변경된 소스코드의 의존하고 있는 대상들마 다시 빌드 (즉 모두 빌드 하지 않는다.)
=> 그래서 프로젝트의 규모가 커질 수록 빌드시간의 차이도 늘어난다.
(Gradle 이 더 좋음)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.programming.mitra</groupId>
<artifactId>java-build-tools</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</build>
</project>
Maven 의 경우 빌드하기위한 명령어로
mvn package를 사용한다.
apply plugin:'java'
apply plugin:'checkstyle'
apply plugin:'findbugs'
apply plugin:'pmd'
version ='1.0'
repositories {
mavenCentral()
}
dependencies {
testCompile group:'junit', name:'junit', version:'4.11'
}
Gradle 의 경우 빌드하기위한 명령어로
gradle tasks --all을 사용한다.
=> 확실히 Gradle 의 코드가 가독성 좋고 간결 한 것을 확인 할 수 있다.
- 의존성 관리 : 외부 라이브러리를 자동으로 관리하기 위함
- 패키징 :
.jar,.war파일로 의존성 파일들이 패키징 되는 데 이는 나중에 배포 시에 사용이 된다.- 코드 컴파일 : Java 소스 코드를 바이트코드로 컴파일 하여 JVM 에서 실행
- 테스트 실행 : 빌드 프로세스를 통해 단위 테스트, 통합 테스트 등을 실행하여 애플리케이션의 안정성을 확인 할 수 있다. (Junit)
- 환경 설정 및 최적화 : 애플리케이션의 환경 설정, 프로파일을 구분해서 개발환경, 테스트환경, 배포환경에서 각각 다른 설정을 적용할 수 있게 도와줌 또한 빌드 과정에서 코드 압축, 난독화 등 최적화 수행
- 배포 : 빌드를 통해 생성된 패키지 파일 (jar) 파일을 클라우드 서버를 이용하여 배포할 수 있도록 한다.
=> 위와 같이 빌드를 하는 수많은 이유가 존재한다.