이론과 실제에서 Maven은 무엇을합니까? 언제 사용할 가치가 있습니까? [닫은]


156

연습을 위해 Java 프로젝트를 시작하려고합니다. Maven에 대해 읽었지만 실제로 사용해야 할 시점을 이해하지 못합니다.

실용적인 팁을 줄 수 있습니까? 메이븐은 많은 도움을 줍니까? Maven은 실제로 내 프로젝트에서 무엇을합니까?


Hej, Maven, Spring 및 Roo에 대한 내 질문 을 살펴보십시오 . Eclipse로 작업 할 때 개발 시간을 단축하기 위해 Maven을 많이 사용했습니다. 그러나 몇 가지 문제가 있습니다. Maven과 함께 Java 주석 시스템을 이해해야한다고 생각합니다. 그러나 내가 연결 한 질문을 살펴보십시오.
mm24

@ArtB는 Maven이 무엇인지에 대한 좋은 설명을 제공합니다. 그러나 그의 대답에 대한 나의 의견에서 말했듯이, 나는 당신이 그것을 사용해야한다고 생각하지 않습니다. 빌드 도구를 원한다면 Gradle을 사용하십시오. 다운로드하여 설치 한 다음 프로젝트에서라는 build.gradle한 줄만 포함 된 파일을 작성하십시오 apply plugin: 'java'. 소스 코드가 일반적인 위치 ( src/main/java, 단위 테스트)에 있다고 가정하면 이제을 말하여 코드를 src/test/java빌드, 테스트 및 패키징 할 수 있습니다 gradle build. 쉬운!
톰 앤더슨

2
Gradle을 사용하려면 Groovy를 배우고 Maven을 사용하여 프로젝트를 보게 될 것이므로 여전히 배울 가치가 있습니다. 또한 Maven을 이해하면 다른 도구를 쉽게 이해할 수 있습니다.
썰매

Maven은 Java 주석과 어떤 관련이 있습니까?
썰매

1
Gradle의 경우 +1, Java 개발자의 경우 집에 가까울뿐만 아니라 maven 아티팩트를 재사용 할 수 있으며 비표준 빌드를 쉽게 만들 수 있습니다. stackoverflow.com/questions/1163173/…
Kalpesh Soni

답변:


183

그것이하는 일

메이븐은 당신의 방법을 정의입니다,는 "빌드 관리 도구"입니다 .java파일로 컴파일 얻을 .class로 포장 .jar(또는 .war.ear) 도구를 사용하여 처리 된 파일 (포스트 / 프리), 사용자 관리 CLASSPATH, 그리고에 필요한 모든 작업을 다른 사람의 종류 프로젝트를 빌드하십시오. Apache Ant , Gradle 또는 Makefile 과 유사합니다.C / C ++의 하지만 필요한 라이브러리 다운로드 및 설치와 같은 다른 일반적인 작업을 통합하여 추가 도구 나 스크립트가 필요하지 않도록 완전히 자체적으로 포함하려고 시도합니다.

또한 "빌드 이식성"테마를 중심으로 설계되었으므로 한 컴퓨터에서는 작동하지만 다른 컴퓨터에서는 작동하지 않는 동일한 빌드 스크립트를 사용하여 동일한 코드를 갖는 문제가 발생하지 않습니다 (이는 알려진 문제입니다. Windows의 VM이 있음) 델파이 응용 프로그램 중 일부를 다른 곳에서 컴파일 할 수 없기 때문에 98 대의 컴퓨터). 이 때문에 IDE 생성 Ant 스크립트는 다른 IDE로 가져 오기가 어렵 기 때문에 다른 IDE를 사용하는 사람들 사이에서 프로젝트를 수행하는 가장 좋은 방법이기도하지만 오늘날 모든 IDE는 Maven ( IntelliJ , EclipseNetBeans)을 이해하고 지원합니다. ). Maven을 좋아하지 않더라도 다른 모든 최신 빌드 도구의 참조 지점이됩니다.

왜 사용해야합니까

Maven에는 매우 좋은 세 가지가 있습니다 .

  1. Maven은 (당신이 사용하는 어떤 것들을 당신이 선언 후) 모두 사용하는 라이브러리를 다운로드합니다 그 라이브러리 자동으로 사용합니다. 이것은 매우 훌륭하며 많은 라이브러리를 엄청나게 쉽게 처리합니다. 이를 통해 "종속성 지옥" 을 피할 수 있습니다 . Apache Ant의 Ivy 와 유사합니다 .

  2. " 컨벤션에 대한 컨벤션 "을 사용하므로 기본적으로 원하는 작업을 정의 할 필요가 없습니다. Ant 또는 Makefile에서해야하는 것처럼 "컴파일", "테스트", "패키지"또는 "정리"단계를 작성할 필요가 없습니다. Maven이 기대하는 곳에 파일을 넣으면 박쥐에서 벗어날 수 있습니다.

  3. Maven에는 JAXB사용하여 XSD 스키마에서 Java 클래스 생성에서 Cobertura로 테스트 범위 측정에 이르기 까지 많은 일상적인 작업을 처리 할 수있는 멋진 플러그인이 많이 있습니다 . 당신에게 그것들을 추가하면 pom.xml그들은 당신이하고 싶은 다른 모든 것과 통합됩니다.

초기 학습 곡선은 가파르지만 (거의) 모든 전문 Java 개발자는 Maven을 사용하거나 원합니다. 모든 프로젝트에 Maven을 사용해야하지만, 익숙해지기까지 시간이 걸리고 때로는 새로운 것을 배우는 것이 때때로 아프기 때문에 수동으로 일을 할 수 있기를 바랍니다. 그러나 Maven에 익숙해지면 빌드 관리에 거의 시간이 걸리지 않습니다.

시작하는 방법

시작하기 가장 좋은 곳은 " 5 분 안에 Maven "입니다. 필요한 모든 파일과 폴더 설정으로 코드를 작성할 준비가 된 프로젝트로 시작할 수 있습니다 (예, 적어도 빠른 시작 아키타 입을 사용하는 것이 좋습니다).

시작한 후에는 도구의 사용법을보다 잘 이해하고 싶을 것입니다. " Maven : Better Builds with Maven "은 그 작동 방식을 이해하기위한 가장 철저한 장소이지만 " Maven : The Complete Reference "는 최신 버전입니다. 이해하기 위해 첫 번째를 읽은 다음 참조를 위해 두 번째를 사용하십시오.


12
Maven을 사용하지 않고 사용하지 않는 것을 기쁘게 생각하는 수많은 전문 Java 개발자가 있습니다. 이들 중 일부는 단순히 복잡성과 유연성을 거부하고 Ant 또는 이와 유사한 것을 고수하지만 Gradle 및 Buildr와 같은 Maven 후임자로 옮겨 간 사람들이 점점 늘어나고 있습니다. 이 후속 작업은 Maven으로부터 강력한 빌드 단계 세트를 즉시 제공한다는 아이디어를 상속 받지만 사용자 정의 단계를 추가하기가 훨씬 쉬워졌습니다. 그들의 존재를 감안할 때, 나는 새로운 프로젝트에 Maven을 사용할 이유가 없다고 생각합니다.
Tom Anderson

5
대답에 얼마나 많은 세부 사항이 있는지에 대한 질문이 항상 있지만 사무실에서 Maven 또는 shitty Ant hell (Ant + bash + perl + 마법의 경로로 구성된 컴퓨터 빌드) 일 가능성이있는 일반적인 Java 개발자 인 경우 항상 있습니다. 좋은 환경에서 A + 개발자와 함께 일하는 행운의 소수 중 하나 인 경우 다른 옵션 (Gradle이 하나임)이 있습니다. 그러나 평범한 곳에서 일하는 경우 Maven은 동료 동료가 뾰족한 것으로 스스로를 자르지 못하게하는 최고의 도구입니다.
썰매

4
Gradle을 사용하기 위해 A + 개발자 여야한다고 생각하지 않습니다. Maven을 채택 할 수있는 조직이 Gradle을 채택하지 못한 이유를 모르겠습니다. Gradle을 사용하면 Ant와 같은 방식으로 발로 자신을 쏠 수 있지만 Maven이 상당히 열심히하는 방식으로 (그리고 그것을 증명하기 위해 동료의 샷 피트 모음이 있습니다); 그것은 Maven이 사실상 불가능하게하는 것들을 가능하게하는 트레이드 오프입니다.
톰 앤더슨

4
Gradle과 같은 것을 사용하고 샷 피트를 피하는 관점에서 프로그래머의 분류 분류를 제안합니다. 일부 프로그래머는 빌드 스크립트를 편집하는 것을 두려워하지 않고 일을 올바르게 수행합니다. 그 사람들은 유용합니다. 일부 프로그래머는 빌드 스크립트를 두려워하므로 만지지 않습니다. 그 사람들은 최소한 해롭지 않습니다. 나는 12 명으로 구성된 팀에 있었고, 우리 중 2 명만이 감히 빌드를 만졌는데 실제로는 효과가있었습니다. 일부 프로그래머는 빌드 스크립트를 두려워하지 않지만 만지면 스크립트를 망칠 것입니다. 그 사람들은 위험합니다.
Tom Anderson

1
그래서 자바에 대한 NPM처럼
KJW

9

로부터 Sonatype의 문서 :

이 질문에 대한 답은 자신의 관점에 달려 있습니다. 대부분의 Maven 사용자는 Maven을 "빌드 도구"라고합니다. 소스 코드에서 배포 가능한 아티팩트를 빌드하는 데 사용되는 도구입니다. 빌드 엔지니어와 프로젝트 관리자는 Maven을보다 포괄적 인 프로젝트 관리 도구라고 할 수 있습니다. 차이점은 무엇입니까? Ant와 같은 빌드 도구는 전처리, 컴파일, 패키징, 테스트 및 배포에만 중점을 둡니다. Maven과 같은 프로젝트 관리 도구는 빌드 도구에있는 여러 기능을 제공합니다. Maven은 빌드 기능을 제공 할뿐만 아니라 보고서를 실행하고 웹 사이트를 생성하며 작업 팀원 간의 의사 소통을 촉진 할 수 있습니다.

Sonatype 문서를 살펴보고 Maven의 힘을 이해하기 위해 사용 가능한 플러그인을 보는 데 시간을 할애하는 것이 좋습니다.

간단히 말해서, Ant보다 (개요) 높은 개념 수준에서 작동합니다. Ant를 사용하여 빌드하려는 파일 및 자원 세트를 지정한 다음 함께 처리 할 방법을 지정하고 (clean / compile / jar)에서 발생하는 순서를 지정하십시오. Maven으로 이것은 모두 암시 적입니다. Maven은 특정 위치에서 파일을 찾을 것으로 예상하고 자동으로 작동합니다. 결과적으로 Maven으로 프로젝트를 설정하는 것이 훨씬 간단 할 수 있지만 Maven의 규칙을 따라야합니다!


나는 그것을 하향 투표하지 않았지만, 아마도 하향 투표자들은 Maven의 전체주의 "프로젝트 관리 도구"철학의 암시 적 보증으로 Sonatype 선전에서 인용 한 것을 읽습니다.
톰 앤더슨

1
내가 대신 그냥 마케팅 과장되게 떠벌 리다를 게시, 당신은 OP의 질문에 대답한다고 생각하지 않습니다 ... 그리고 그 과장되게 떠벌 리다는 rediculous "프로젝트 관리"가 훨씬 많이 있기 때문에 , 메이븐은 더는 데 도움이보다 혼동하는 역할을 수행하는 것보다 이모.
썰매

2
@Brian 죄송합니다. 이전 코멘트가 불꽃처럼 들리지만 다시 말하겠습니다. Maven이 무엇인지 이미 이해하고 있다면 처음에 Maven을 잘 설명 하고 있지만 초기 시작점으로는 도움이되지 않습니다.
썰매

5

Maven빌드 도구입니다. 와 함께 AntGradle있는 Java건물의 도구를 제공합니다.
Java 초보자라면 IDE를 사용하여 빌드 Maven하면 가파른 학습 곡선이 있습니다.


NetBeans에서 Maven에 대한 IDE 지원은 매우 뛰어나므로 학습 곡선이 거의 존재하지 않습니다.
기린 선장
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.