Apache에 빌드 및 종속성 관리를위한 두 개의 별도 도구가있는 이유는 무엇입니까?


9

아파치는 두 가지 도구를 가지고있다 :

그들은 둘 다 같은 틈새 시장을 채우는 것 같습니다. 두 가지 질문이 있습니다.

  1. 무엇 하이라이트 두 도구 사이의 주요 차이점은?
    • 나는 정말로 긴 기사가 둘 사이의 차이점에 대해 쓰여질 수 있다고 확신합니다. 나는 그 정도의 세부 사항을 찾고 있지 않으며 다른 것을 선택하기위한 주관적인 주장을 찾고 있지 않습니다.
  2. 프로그래밍의 역사-아파치가 목적과 매우 유사한 두 개의 완전히 분리 된 툴 세트를 생성하기 위해 어떻게 발전 했습니까?

답변:


7

무엇 하이라이트 두 도구 사이의 주요 차이점은?

  • 프로젝트 구조

    • Maven은 특정 프로젝트 구조를 선호합니다. Maven Way를 수행해야합니다. Maven pom.xml은 일반적으로 다른 모든 프로젝트에 의해 상속되는 루트에 이미 구성된 공통 빌드 단계와 함께 제공됩니다 pom.xml.

    • Ant + Ivy는 더 개방적입니다. 많은 작업을 수행 할 수 있지만 프로젝트 구조 또는 스크립트 사용 측면에서 몇 가지 기본 요구 사항 만 있습니다. 미리 정해진 빌드 작업, 목표 또는 프로세스가 없습니다. 각각 build.xml은 깨끗한 슬레이트입니다 (물론 다른 스크립트를 포함하지 않는 한).

  • 정위

    • 메이븐은 목표 지향적입니다. 당신은 당신이 "빌드"또는 "배포"과에 물어 "이 빌드 타겟을 실행"말을하지 않습니다 메이븐이 거기까지 할 필요가 무엇을 수행합니다 당신이 말하는 무엇을 당신이 원하는.

    • Ant + Ivy는 작업 지향적입니다. 각 작업은 구현 정의 및 사용자 정의입니다. 당신은 당신이 원하는 것을 하는 방법 을 알려 줍니다 .

  • 의존성 관리

    • Maven은 종속성을 자동으로 처리하는 것으로 가장 잘 알려져 있습니다. 리포지토리 URL이 미리 올바르게 구성되어 있으면 사용자 상호 작용없이 빌드하는 동안 올바른 버전을 다운로드합니다.

    • Ant는 "Java Classpath"를 제외하고는 종속성 관리가 없습니다. 아이비는 Maven보다 약간 지루하지만 여전히 자동화 된 종속성 관리를 추가합니다. 여기서 핵심은 의존성 관리를 선택하지 않거나 (예 : "내 배포판에 포함되거나 소스 제어에 체크인 된 JAR") 아이비를 통해 아웃소싱 할 수 있다는 것입니다. 이러한 선택은 프로젝트 요구를 충족시킬 수있는 유연성을 의미합니다.

  • 사용의 용이성

    • Maven은 (이론적으로) 사용하기 쉽습니다. 모든 개발자는 Maven 프로젝트를 선택하여 모든 프로젝트 리소스의 위치와 용도를 즉시 알 수 있습니다. 이는 Maven이 특정 방식으로 작업하는 방식에 관한 첫 번째 시점 때문입니다.

    • Ant + Ivy는 각 프로젝트 가 다를 있으므로 학습 곡선이 더 가파를 있습니다. 프로젝트마다 다른 목표를 달성하는 방법이 다를 수 있습니다.

  • 확장 성

    • Maven은 플러그인을 작성하고 빌드 프로세스를 변경할 수 있습니다. 그러나 pom.xml개발자가 미리 정해진 빌드 프로세스를 추진할 수 있는 뿌리를 가지고 있습니다. 새로운 목표 또는 구축 단계는 구축 과정에 투입하기 위해 신중한 사고와 추가 노력이 필요합니다.

    • Ant + Ivy는 플러그인과 새로운 작업을 작성할 수 있습니다. 그렇게하는 것은 매우 쉽고 최소한의 노력으로 새로운 작업을 통합 할 수 있습니다. 새로운 과제를 뒤섞거나 통합 할 미리 정해진 목표 나 목표는 없습니다.

아파치가 목적과 완전히 유사한 두 개의 완전히 분리 된 툴 세트를 만들도록 어떻게 진화 했습니까?

가장 먼저 이해해야 할 것은 Apache 프로젝트는 별도의 독립적 인 프로젝트가 운영되는 우산 일뿐입니다. 다른 팀이 다른 프로젝트를 수행합니다. 개별 개발자는 여러 프로젝트에서 작업 할 수 있지만 Ant, Ivy 및 Maven을 통합하는 전체 로드맵은 없습니다.

개미가 먼저왔다. Java와 동등한 Make로 설계되었습니다. Make는 Java 프로젝트를 빌드 할 수 있지만 지루합니다. Make는 여러 컴파일 단위를 개별적으로 컴파일 한 다음 연결합니다. Java 방식은 javac모든 것을 한 번에 컴파일하며, "링크"라고 부르는 것은 실제로 런타임에 JVM의 장에서 발생합니다. Make는 작업에 적합한 도구가 아니 었습니다. Java 용 Makefile은 기본적으로 하나 또는 두 개의 대상 ( javac, jar)입니다.

Ant는 Make 위에 약간의 구조를 추가했지만 프로세스를 근본적으로 변경하지는 않았습니다.

얼마 후 커뮤니티는 jar 파일을 찾는 것이 재미 있지 않다는 것을 알게되었습니다. 또한 프로젝트를 구성하는 표준 방법이 없었습니다. 일관성없이 Java 개발은 혼란 스러웠습니다. Maven은 이러한 문제를 해결하도록 설계되었습니다. 일반적인 프로젝트 구조를 가져오고 jar 파일을 자동으로 추적합니다.

그러나 Ant는 여전히 유용했습니다. 일부 프로젝트는 Ant 프로세스의 임시 특성에 더 적합합니다. 일부 프로젝트는 코드를 컴파일하지 않습니다. 일부 프로젝트는 오래되어서 누군가가 Maven으로 "업그레이드"할 가능성이 거의 없었습니다.

아이비 (Ivy)도 함께 제공합니다. Ant에 종속성 관리 기능을 추가하여 프로젝트에 두 가지 이점을 모두 제공합니다. 레거시 스크립트를 유지하거나 고도로 사용자 정의 된 환경을 유지할 수 있지만 Maven의 가장 중요한 기능인 종속성 관리를 얻을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.