itsource

Maven은 npm과 비슷한가요?

mycopycode 2022. 10. 26. 22:40
반응형

Maven은 npm과 비슷한가요?

패키지에서 의존관계를 찾는 작업을 npm과 함께 해왔기 때문입니다.json 파일링 후 다운로드 해주세요.마찬가지로 Java 프로젝트에서 pom.xml 파일을 볼 수 있습니다.maven이 이 파일을 검색하여 의존관계를 다운로드합니까?이 pom.xml 파일을 패키지처럼 전달해도 될까요?json, 의존성 병을 주는 대신?이들 툴은 서로 다른 플랫폼용으로만 구축되어 있습니까?

같은 도구에 다른 언어?

Maven은 Java에서 가장 많이 사용되는 빌드 및 종속성 해결 도구이며, 이는 NPM이 JS에서 사용되는 것과 같습니다.하지만 이것은 단지 다른 언어를 위한 같은 도구가 아닙니다.Java와 JS 빌드 사이에는 분명히 큰 차이가 있으며, 이러한 차이는 Maven의 운영 방식에서 직접 확인할 수 있습니다.예를 들어, 많은 JS 툴이 Git에 의존하여 무거운 작업을 하고 있는 반면, Maven은 Git보다 앞서서 Git은 역사적으로 잘 처리되지 않았던 바이너리 아티팩트를 처리할 필요가 있기 때문에 Maven은 커스텀 파일 시스템 기반의 Maven 저장소를 사용합니다.Maven에서는 소스와 바이너리가 명확하게 구분되지만 JS에서는 거의 동일합니다.

메이븐의 기본

가장 순수한 형태의 메이븐은 선언적 모델을 따릅니다.pom.xml(와 비슷하다.package.json)는 빌드의 다른 속성을 정의하지만 스크립트는 포함하지 않습니다.단점은 플러그인을 사용해야 하므로 스크립트를 사용하지 않고 빌드의 일부 측면을 미세 조정하는 것이 어려울 수 있다는 것입니다.장점은 다른 빌드를 보다 쉽게 이해할 수 있다는 것입니다.pom.xml이는 보통 너무 많은 커스터마이즈 없이 동일한 접근방식을 따르기 때문입니다.Gradle은 Maven의 표준과 규약을 기반으로 구축된 Groovy 기반의 인기 툴로, 심플화를 위해 특별히 설계되었습니다.pom.xml이 '스크립트 없음' 장벽을 깨야 합니다.

의존 관계 참조

와 마찬가지로package.json, 를 사용하지 않습니다.pom.xml종속성 좌표를 정의하고 빌드 툴이 나머지를 처리하도록 합니다.Maven에서 이러한 좌표의 기본 형식은 GAV(groupId, artifictId, 버전)입니다.

평평한 의존관계 트리?

다른 답변의 코멘트를 바탕으로 Maven은 NPM이 기본적으로 제공하는 "내포된 의존관계 트리"가 아닌 "평탄한 의존관계 트리"를 제공합니다.Maven은 동일한 종속성의 여러 버전을 허용하지 않습니다.다른 버전이 요구될 경우 Maven은 종속성 해결을 사용하여 단일 버전을 선택합니다.즉, 전이 종속성이 필요한 버전과 다른 버전을 얻을 수 있지만 이를 관리하는 방법이 있습니다.단, 이 제한은 Maven이 아닌 Java에서 발생합니다. Java에서는 클래스 로더가 클래스 경로에서 여러 개의 정의가 발견되더라도 하나의 클래스 정의에만 액세스할 수 있기 때문입니다.Java는 특별히 이 문제를 잘 다루지 못하기 때문에 Maven은 처음부터 이 시나리오를 피하려고 합니다.

주의: npm v3 이후 의존관계는 평평합니다.대체 패키지 매니저 실도 같은 기능을 합니다.

성숙함

게다가 Maven은 NPM보다 상당히 오래되어, 유저 베이스가 크고, 커스텀 플러그 인의 수가 많아, 지금까지의 경우 전체적으로 보다 성숙하다고 생각할 수 있습니다.때때로 Maven은 다른 언어나 Android와 같은 특정 환경을 처리하기 위한 플러그인이 있기 때문에 비 Java 또는 폴리글롯 프로젝트에 사용됩니다.Maven과 실제로 여러 JS 빌드 도구를 처리하는 프런트 엔드-매븐-플러그인과 같은 다른 빌드 도구를 연결하는 플러그인이 있습니다.

이하 사용|maven | npm 용어를 각각 구분하려면:

공통 기능:

  • 두 도구 모두 디스크립터 파일|package.json에 기반한 의존관계(architects | packages)의 다이내믹페치를 서포트하고 있습니다.또, 독자적인 아티팩트| 패키지를 전개, 퍼블리시 할 도 있습니다.

  • 둘 다 디폴트 퍼블릭저장소 |레지스트리(https://registry.npmjs.org | https://registry.npmjs.org)를 가지고 있지만 서드파티(| 경유).npmrc를 사용할 수도 있습니다.

  • 둘 다 빌드 수준의 의존관계 개념을 지원합니다(플러그인 | 스크립트에서 사용되는 DevDependency).* Maven 지원provided의존관계도 있지만 javascript는 컨테이너에 거의 전개되지 않기 때문에 npm에는 적용되지 않는 것 같습니다.

  • 둘 다 의존관계 네임스페이스를 지원합니다.groupId|scope

차이점:

  • maven에는 추가 로컬 저장소(캐시)가 있습니다.

    • 다른 프로젝트에 대해 동일한 종속성을 다시 가져올 필요가 없습니다.
    • 로컬에 설치된 아티팩트는 다른 로컬 프로젝트에서 자동으로 액세스할 수 있습니다.
  • 프로젝트 빌드인으로부터의 의존관계가 다운로드 됩니다.<homedir>/.m2npm에 다운로드 됩니다.<projectdir>/node_modules.

  • 메이븐의 구축은 일반적으로 한 의 작업으로 이루어집니다.mvn package(deps, build 등).npm에서는 2단계 프로세스입니다.npm install(deps) ,npm build(빌드)

  • maven은 다른 패키징 옵션에 따라 디폴트 운용(목표)이 부가되는 단계로 구성된 빌드 라이프 사이클(빌드, 빌드, 빌드)을 정의합니다..jar,.war,.earE.T.C.)그런 다음 이러한 작업을 덮어쓰거나 플러그인 시스템을 통해 새 작업을 주입할 수 있습니다.이는 빌드, docgen, test, e.t.c를 위한 일종의 기본 제공 솔루션을 제공합니다.
    npm 어프로치는 보다 심플합니다(「스크립트」를 참조).

  • 이 때문에 npm은 javascript의 패키지 관리 로, maven은 java의 빌드 자동화의존성 관리 툴로 라벨이 부착되어 있습니다.

  • 메이븐 셋업에서는 빌드 프로세스의 편집이 더 일반적입니다.
    npm에는 코드를 작성하거나 다음과 같은 보완 빌드 도구를 구성합니다.gulp,webpack이티시

  • 어떤 이유에서인지 npm 모듈의 사용자가 정의한 버전 범위는 maven보다 훨씬 느슨합니다.이로 인해 트랜지셔널 의존관계 문제가 발생할 수 있습니다.그 때문에, 다음의 파일이 최근 추가되고 있습니다.

  • npm을 사용하면 새로운 프로젝트를 시작하는 것이 훨씬 쉬워집니다.npm initmaven을 사용하는 경우 최소값으로 쓰는 방법을 알아야 합니다.pom.xml또는 원형에 대해 읽어보십시오.

  • 일반적으로 편집하는 것이 훨씬 일반적입니다.pom.xml보다package.json예를 들어 maven에 종속성을 추가하는 것명령줄을 통해 npm에 있는 동안 수동으로(또는 IDE를 통해) 수행됩니다.

  • 모든 빌드 툴과 마찬가지로 하나의 툴을 내부에서 호출할 수 있지만, 그 반대보다는 내부에서 npm을 호출하는 것이 훨씬 일반적이라고 생각합니다.

  • npm은 개발 및 프로덕션 빌드를 지원합니다.일반적으로 이것은 프로파일을 통해 정의되어야 합니다.

네, 자바와 비슷한 포장 도구입니다.찾다gradle또, 그 때문에, 보다 자유롭게 사용할 수 있습니다.groovy language, 단, 를 사용할 수 있습니다.maven당신의 의존관계를 정리할 수 있습니다.거기에 태그로 포함시키면 메이븐이 대신 일을 할 수 있습니다.

종속성 트리를 통과하여 모든 적절한 jar를 다운로드합니다.

네, gradle도 그렇지만 npm만큼 사용하기 쉬운 것은 아닙니다.

언급URL : https://stackoverflow.com/questions/38388824/is-maven-similar-to-npm

반응형