왜 메이븐? 장점은 무엇입니까? [닫은]


131

개미와 비교해 maven을 사용하면 얻을 수있는 주요 이점은 무엇입니까? 도움이되는 도구보다 성가신 것 같습니다. 일반 Eclipse Java EE (m2eclipse 없음) 및 Tomcat과 함께 maven 2를 사용합니다.

메이븐 지지자들은

  1. Maven을 사용하면 패키지 종속성을 쉽게 얻을 수 있습니다

  2. Maven은 표준 디렉토리 구조를 갖도록 강요합니다

내 경험에

  1. 패키지 의존성을 파악하는 것은 그리 어렵지 않습니다. 어쨌든 거의하지 않습니다. 프로젝트 설정 중 한 번, 업그레이드 중 더 많을 수 있습니다. maven을 사용하면 일치하지 않는 종속성, 잘못 작성된 폼을 수정하고 어쨌든 패키지 제외를 수행하게됩니다.

  2. 느린 FIX-COMPILE-DEPLOY-DEBUG 사이클로 생산성이 저하됩니다. 이것이 나의 주요 그립입니다. 변경하면 maven 빌드가 시작되고 배포 될 때까지 기다려야합니다. 핫 배포가 전혀 없습니다.

아니면 내가 잘못하고 있습니까? 올바른 방향으로 알려주세요. 저는 모두 귀입니다.


1
정말 포인트 2에 관심이 있습니다. 다른 사람이 느린 수정 컴파일 배포주기를 알 수 있습니까? 또는 maven이 우리가 가진 / 가장 일반적인 / 가장 멋진 것 중 최고이기 때문에 모두가 알고 있지만 조용히 유지합니다. 전개 할 전쟁 / 귀를 만드는 것은 충분히 나쁘고, maven은 그것을 악화시키고 있습니다. 폭발 한 디렉토리 구조에서 maven 프로젝트의 jsp 변경 사항을 보려면 내 컴퓨터에서 약 5 초가 걸립니다. 1 초 미만 여러 번 저장할 수 있으며 maven에서 최신 변경 사항 만 컴파일합니다. 모든 저장은 빌드를 트리거합니다.
trix

어쩌면 maven 그것은 여기서 문제가 아니지만 IDE 지원 / 플러그인입니까? 그러나 maven은 꽤 오랫동안 주변에 있었고, 제대로 얻을 수 없다면 다른 것을 옮기거나 발명하거나 제안해야합니까? 아이비 외에
trix

2
@Javid 질문의 제목은 비슷해 보이지만 질문의 본문은 다른 IMO이며 나는 그것을 속임수로 간주하지 않습니다.
Pascal Thivent


답변:


108

패키지 의존성을 파악하는 것은 그리 어렵지 않습니다. 어쨌든 거의하지 않습니다. 프로젝트 설정 중 한 번, 업그레이드 중 더 많을 수 있습니다. maven을 사용하면 일치하지 않는 종속성, 잘못 작성된 폼을 수정하고 어쨌든 패키지 제외를 수행하게됩니다.

장난감 프로젝트에는 그렇게 어렵지 않습니다. 그러나 내가 작업하는 프로젝트에는 실제로 많은 프로젝트가 있으며 표준화 된 이름 지정 체계를 사용하여 전 이적으로 가져 와서 매우 기쁩니다. 수동으로이 모든 것을 수동으로 관리하는 것은 악몽 일 것입니다.

그리고 때로는 의존성의 수렴을 위해 노력해야합니다. 그러나 두 번 생각하십시오. 이것은 Maven 고유의 것이 아닙니다. 이것은 종속성을 사용하는 모든 시스템에 고유합니다 (일반적으로 Java 종속성에 대해 이야기하고 있습니다).

따라서 Ant를 사용하면 수동으로 모든 작업 을 수행해야 한다는 점을 제외하고 는 동일한 작업을 수행해야합니다. 일부 버전의 프로젝트 A 및 해당 종속성 가져 오기, 일부 버전의 프로젝트 B 및 해당 종속성 가져 오기, 사용하는 정확한 버전 확인, 확인 서로 겹치지 않으며 호환되지 않는지 확인하는 등 지옥에 온 것을 환영합니다.

반면, Maven은 종속성 관리를 지원하고이를 전 이적으로 검색 하여 종속성 관리 고유 의 복잡성을 관리하는 데 필요한 툴링을 제공 합니다. 종속성 트리를 분석하고 전이 종속성에 사용되는 버전을 제어하고 일부를 제외 할 수 있습니다 그들 경우 필요한 마법이 없다 등의 모듈에 걸쳐 수렴을 제어 할 수 있습니다. 그러나 적어도 당신은 지원을합니다.

그리고 의존성 관리가 Maven이 제공하는 것의 일부일 뿐이라는 점을 잊지 마십시오. 훨씬 더 많은 것이 있습니다 (예를 들어 Sonar 와 같이 Maven과 잘 통합되는 다른 도구는 말할 것도 없습니다 ).

느린 FIX-COMPILE-DEPLOY-DEBUG 사이클로 생산성이 저하됩니다. 이것이 나의 주요 그립입니다. 변경하면 maven 빌드가 시작되고 배포 될 때까지 기다려야합니다. 핫 배포가 전혀 없습니다.

첫째, 왜 이렇게 Maven을 사용합니까? 난 아니야 IDE를 사용하여 테스트를 작성하고 코드를 전달, 리팩터링, 배포, 핫 배포하고 커밋하기 전에 로컬 Maven 빌드를 실행하여 연속 빌드를 중단하지 않도록합니다.

둘째, Ant를 사용하면 상황이 훨씬 나아질 것입니다. 그리고 필자의 경험에 따르면 바이너리 의존성을 사용하는 모듈 식 Maven 빌드는 일반적인 모 놀리 식 Ant 빌드보다 빠른 빌드 시간을 제공합니다. 어쨌든 Maven Shell 을 살펴보고 Maven 환경을 즉시 사용할 수 있습니다 (매우 훌륭합니다).

결국, 유감스럽게도 유감입니다. 실제로 Maven이 생산성을 떨어 뜨리는 것은 아닙니다. 도구를 잘못 사용하고 있습니다. 그리고 당신이 그것에 만족하지 않는다면, 글쎄, 내가 말할 수있는 것은 그것을 사용하지 마십시오. 개인적으로 2003 년부터 Maven을 사용하고 있으며 결코 뒤돌아 보지 않았습니다.


@Pascal, 사용중인 도구를 알려줄 수 있습니까? IDE, 플러그인 등. .properties 파일 또는 jsp 파일 을 변경하면 maven 빌드 수행 하지 않고 핫 전개 됩니다 . (여기서 핫 배포가 올바른 용어가 아닐 수도 있습니다). 나는 개미의 의미가 명확하지 않았다. 개발 중에 표준 분해 디렉토리를 사용하고 개미를 사용하여 릴리스 전에 전쟁 / 귀를 만듭니다. 분해 된 디렉토리의 경우 규칙은 간단합니다. 파일을 src에서 클래스로 복사 / 컴파일하고 나머지는 건드리지 마십시오.
trix

계속 ... 그러나 내 프로젝트에서 Tomcat에 배포되는 것은 모듈의 항아리입니다. .jsp를 변경하면 해당 항아리를 다시 빌드하지 않아도됩니까?
trix

4
대부분의 프로젝트는 장난감 프로젝트, 일명 단순한 종속성이라는 것을 인정해야합니다. 그것은 단지 통계 법칙입니다.
trix

2
핫 배치 개미 대 메이븐에 대한 @trix : 핫 배치를 위해 개미 빌드를하지 않는 경우 왜 Maven을 사용합니까? 당신이 같은 개미를 사용하면 적어도 같은 시간이 걸리는 것 같아요?
Reddy

2
파스칼, 프로젝트를 어떻게 Maven으로 구성하고 빌드 프로세스를 사용하여 배포하지 않습니까? 이것이 초기 질문의 요점 2입니다. 어떻게해야할지 궁금합니다. 분명한 설명을 해 주시면 감사하겠습니다.

20

Maven은 Ant와 같은 빌드 도구가 아닌 완벽한 프로젝트 개발 도구로 간주 될 수 있습니다. maven 플러그인과 함께 Eclipse IDE를 사용 하여 모든 문제를 해결해야합니다.

Maven 사용시 이점 페이지 에서 인용 한 Maven의 장점은 다음과 같습니다 .

헤닝

  • 빠른 프로젝트 설정, 복잡한 build.xml 파일 없음, POM 만 가능
  • 프로젝트의 모든 개발자는 중앙 집중식 POM으로 인해 동일한 jar 종속성을 사용합니다.
  • "무료"프로젝트에 대한 여러 보고서 및 메트릭 가져 오기
  • 병을 중앙 위치에서 잡아 당길 수 있기 때문에 소스 분포의 크기를 줄입니다.

엠마누엘 베니스

  • 많은 목표를 사용할 수 있으므로 ANT와 달리 특정 빌드 프로세스 부분을 개발할 필요가 없습니다. antrun 플러그인을 사용하여 빌드 프로세스에서 기존 ANT 태스크를 재사용 할 수 있습니다

제시 맥코넬

  • 모듈 식 코드 디자인을 촉진합니다. 여러 프로젝트를 간단하게 관리 할 수 ​​있기 때문에 디자인을 여러 논리 파트로 배치 할 수 있으며 pom 파일에서 종속성 추적을 사용하여 이러한 파트를 함께 제직 할 수 있습니다.
  • 모듈 식 코드 디자인을 시행합니다. lipservice를 모듈 코드로 지불하는 것은 쉽지만 코드가 별도의 컴파일 프로젝트에있을 때 종속성 관리에서 특별히 허용하지 않는 한 코드 모듈간에 수분 참조를 교차하는 것은 불가능합니다. 지금이 작업을 수행하고 나중에 구현을 수정하십시오.
  • 종속성 관리가 명확하게 선언되었습니다. 의존성 관리 메커니즘을 사용하면 jar 버전 관리를 망치려고해야합니다 ... '이 공급 업체 jar의 버전이 무엇입니까?'라는 고전적인 문제는 없습니다. 그리고 기존 프로젝트에서 설정하면 저장소에서 '알 수없는'버전을 만들어서 일을 시작하고 실행해야 할 때 기존 엉망에서 벗어납니다. ABC.jar의 실제 버전.
  • 강력한 형식의 수명주기 소프트웨어 시스템이 빌드 시작부터 끝까지 진행되는 강력한 수명주기가 있습니다. 사용자는 자신의 수명주기를 통합하는 대신 시스템을 수명주기에 혼합하고 일치시킬 수 있습니다. 이것은 사람들이 한 프로젝트에서 다른 프로젝트로 이동하고 소프트웨어 구축 측면에서 동일한 어휘를 사용하여 말할 수있는 추가 이점을 제공합니다.

빈센트 매솔

  • 더 큰 추진력 : 개미는 이제 레거시이며 빠르게 발전하지 않습니다. Maven은 빠르게 발전하고 있으며 Maven (CI, Dashboard 프로젝트, IDE 통합 등) 주위에 많은 가치가있는 도구를 보유 할 가능성이 있습니다.

5
다운 투표하는 동안 이유를 제시하십시오. 스택 오버플로에 대해서는 언급되지 않지만 윤리적 규칙입니다.
YoK

1
참고 문헌에는 아무런 문제가 없지만 내용이 귀하의 것이 아님을 분명히해야합니다.
Pascal Thivent

감사. 나는 그것이 어디에서 참조되었는지 언급하는 것 이외의 인용을 확실히 할 것입니다. 스택 오버 플로우에서 30 일이 지나도 여전히 예술을 배우고 있습니다 :).
YoK

11

소규모 프로젝트에 대한 의존성을 파악하는 것은 어렵지 않습니다. 그러나 수백 개의 종속성이있는 종속성 트리를 다루기 시작하면 상황이 쉽게 벗어날 수 있습니다. (나는 여기서 경험에서 말하고 있습니다 ...)

다른 점은 증분 컴파일 및 Maven 지원 (Eclipse + m2eclipse 등)이있는 IDE를 사용하는 경우 편집 / 컴파일 / 핫 배치 및 테스트를 설정할 수 있다는 것입니다.

나는 과거에 나쁜 경험 (이전 Maven)으로 인해이 개발 모드를 불신하게 되었기 때문에 개인적으로 이것을하지 않습니다. 아마도 누군가 이것이 실제로 Eclipse + m2eclipse에서 작동하는지에 대해 언급 할 수 있습니다.


maven으로 시작하여 모든 종속성을 얻은 다음 종속성을 자신의 프로젝트에 복사 할 수 있습니다.
trix

2
당신이 할 수 있다고 생각합니다. 그러나 프로젝트의 종속성을 업데이트하거나 프로젝트가 스냅 샷에 의존하는 경우 문제가 발생할 수 있습니다.
Stephen C

나는 2 개의 프로젝트를 가지고 있으며, maven 프로젝트의 유일한 목적은 의존성을 얻는 것입니다. 버전 관리를 사용하여 종속성 업데이트 간의 변경 사항을 추적하십시오. 어쨌든이 작업을 수행하면 빌드가 중단되는 경우 변경 사항을 볼 수 있습니다.
trix

4
어. 그것은 Maven이 사용되도록 설계된 방식이 아닙니다. Maven의 가장 큰 장점 중 하나는 종속 라이브러리를 버전 제어에 체크인하지 않는 것입니다. 접근 방식을 사용하면 많은 버전의 이진 파일로 VCS를 복잡하게 만들 수 있습니다. 그리고 일부 VCS는 특히 이진 파일 처리에 좋지 않습니다.
Stephen C

2
일반적으로 사용자가 프로그램을 작성할 때 마법의 어떤 종류의 매우 지친로 어려운 방법을 배울 수 : -S
Thorbjørn Ravn 안데르센

9

Maven은 실제로 좋아하는 것을 결정 하고 사용하고 싶은 도구 중 하나입니다. 왜냐하면 배우는 데 꽤 많은 시간을 할애하고 결정을 한 번만 내렸다면 모든 종류를 건너 뛸 수 있기 때문입니다. 배우는 동안 의심의 여지가 있습니다 (당신 그것을 좋아 하고 그것을 사용하기를 하기 때문에)!

강력한 규칙은 Maven 프로젝트에서 놀라운 일을 할 수있는 Hudson과 같은 여러 곳에서 도움이되지만 처음에는보기 어려울 수 있습니다.

편집 : 2016 년 현재 Maven은 세 가지 주요 IDE가 모두 소스를 즉시 사용할 수있는 유일한 Java 빌드 도구입니다. 즉, maven을 사용하면 빌드 IDE를 무시하게됩니다. 예를 들어 일식에서 정상적으로 작업하더라도 Netbeans 프로파일 링을 사용할 수 있습니다.


1
그리고 그 반대도 마찬가지입니다. 많은 사람들이 개미가 아니기 때문에 선입견을
미치게됩니다

반대? 네 말 뜻은?
Thorbjørn Ravn Andersen

9

개미에 대한 Maven의 장점은 꽤 많습니다. 여기에 요약하려고합니다.

컨벤션에 대한 컨벤션
메이븐은 프로젝트 레이아웃과 시작을 위해 독특한 접근 방식을 사용하므로 프로젝트를 쉽게 시작할 수 있습니다. 일반적으로 프로젝트의 아티팩트를 가져 오기 위해 checkount 및 maven 명령 만 필요합니다.

프로젝트 모듈화
프로젝트 규칙은 개발자가 프로젝트를 모듈화하도록 제안합니다. 단일 프로젝트 대신 종종 작은 하위 구성 요소로 프로젝트를 나눠야하므로 전체 프로젝트 구조를보다 쉽게 ​​디버그하고 관리 할 수 ​​있습니다.

종속성 관리 및 프로젝트 수명주기
전반적으로 SCM 구성이 좋고 내부 리포지토리를 사용하면 종속성 관리가 매우 쉬우 며 프로젝트 수명주기 (구성 요소 버전, 릴리스 관리 등)의 관점에서 다시 생각해야합니다. 개미보다 조금 더 복잡하지만 다시 프로젝트 품질이 향상됩니다.

maven에 어떤 문제가 있습니까?
메이븐은 쉽지 않습니다. POM 내에서 빌드주기 (수행 대상 및시기)가 명확하지 않습니다. 또한 구성 요소의 품질과 공용 리포지토리의 종속성 누락과 관련하여 일부 문제가 발생합니다.
가장 좋은 방법은 종속성을 캐싱 (및 유지)하기위한 내부 리포지토리를 보유하고 구성 요소의 릴리스 관리에 적용하는 것입니다. 책의 샘플 프로젝트보다 큰 프로젝트의 경우 전후에 maven에게 감사합니다.


6

Maven은 표준 규칙과 방법을 사용하여 개발주기를 가속화하는 동시에 높은 성공률을 달성함으로써 빌드 프로세스에 이점을 제공 할 수 있습니다. Maven이 개발 프로세스에서 어떻게 도움을 줄 수 있는지에 대한 자세한 내용은 Maven 사용의 이점을 참조하십시오.


3

Maven은 POM (프로젝트 객체 모델)을 기반으로하는 강력한 프로젝트 관리 도구입니다. 프로젝트 빌드, 종속성 및 문서화에 사용됩니다. ANT와 같은 빌드 프로세스를 단순화합니다. 그러나 그것은 ANT보다 너무 진보되어 있습니다. Maven은 빌드, 문서, 레포 링, SCM, 릴리스, 배포를 관리하는 데 도움이됩니다. -maven 저장소는 pom.xml 파일이있는 패키지화 된 JAR 파일의 디렉토리입니다. Maven은 리포지토리에서 종속성을 검색합니다.


2

나는 포인트 2를 건너 오지 않았다? 이것이 어떤 식 으로든 배포에 영향을 준다고 생각하는 이유를 설명 할 수 있습니까? maven이 있으면 특정 계층의 버그에 대한 핫픽스를 실제로 허용하고 프로젝트의 나머지 부분에서 API를 독립적으로 개발할 수있는 모듈 식 방식으로 프로젝트를 구성 할 수 있습니다.

모든 것을 하나의 모듈로 만들려고 할 수 있습니다.이 경우 문제는 실제로 maven이 아니라 사용 방식입니다.


나는 일반 이클립스 jee, maven 2 및 tomcat을 사용하고 있습니다. 분명히 웹 앱입니다. tomcat에 대한 변경 사항을 확인하기 위해 속성 파일 또는 jsp를 변경하는 경우 maven은 빌드를 수행하고 war / ear를 생성하고 tomcat에 배포해야합니다. 분해 디렉토리 구조를 사용하는 경우와 비교할 때 속도가 느립니다.
trix

1
Tomcat과 함께 Eclipse에서 @trix Hot deploy가 작동합니다. 당신은 잘못하고있다.
Pascal Thivent

0

이것은 주석 이었어 야하지만 주석 길이에 맞지 않았으므로 대답으로 게시했습니다.

다른 답변에서 언급 한 모든 이점은 maven을 사용하는 것보다 간단한 방법으로 얻을 수 있습니다. 예를 들어 프로젝트를 처음 사용하는 경우 어쨌든 프로젝트 아키텍처를 작성하고, 컴포넌트를 결합하고, jar를 다운로드하고 lib 폴더에 복사하는 것보다 코딩하는 데 더 많은 시간을 소비하게됩니다. 당신이 당신의 도메인에 경험이 있다면, 당신은 이미 어떤 라이브러리로 프로젝트를 시작하는 방법을 알고 있습니다. 특히 "종속성 관리"를 자동으로 수행하면서 많은 문제가 발생하는 경우 maven을 사용하면 아무런 이점이 없습니다.

나는 maven에 대한 중간 수준의 지식 만 가지고 있지만 maven을 사용하지 않고 ERP와 같은 대규모 프로젝트를 수행했다고 말합니다.

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