Saltar al contenido

¿Maven es similar a npm?

Investigamos en distintos espacios y de esta forma brindarte la respuesta para tu problema, si continúas con preguntas déjanos la inquietud y te responderemos porque estamos para servirte.

Solución:

¿Misma herramienta, diferente idioma?

Maven es la herramienta de resolución de dependencia y compilación más popular para Java, al igual que NPM lo es para JS. Pero no es solo la misma herramienta para un idioma diferente. Obviamente, existen grandes diferencias entre las compilaciones de Java y JS, y estas diferencias son directamente visibles en la forma en que opera Maven. Por ejemplo, mientras que muchas herramientas JS dependen de Git para hacer un trabajo pesado, Maven trabaja con repositorios Maven personalizados basados ​​en sistemas de archivos, ya que Maven es anterior a Git y necesita manejar artefactos binarios, que Git históricamente no manejaba bien. En Maven hay una clara separación entre fuentes y binarios, mientras que a menudo son lo mismo en el mundo JS.

Conceptos básicos de Maven

Maven en su forma más pura sigue un modelo declarativo, donde pom.xml (Similar a package.json) define diferentes propiedades de la compilación, pero no contiene scripts. La desventaja es que puede ser un desafío ajustar algunos aspectos de la compilación sin usar scripts, ya que debe depender de los complementos. La ventaja es que puede ser más fácil comprender otras compilaciones con solo mirar pom.xml, ya que suelen seguir el mismo enfoque sin demasiada personalización. Gradle es una popular herramienta basada en Groovy construida sobre los estándares y convenciones de Maven, y está específicamente diseñada para simplificar pom.xml y romper esta barrera de “no escritura”.

Haciendo referencia a sus dependencias

similar a package.json, no trabajas con pom.xml de su dependencia directamente, sino que defina las coordenadas de dependencia y deje que su herramienta de construcción se encargue del resto. En Maven, la forma básica de estas coordenadas es GAV (groupId, artifactId, version).

¿Árbol de dependencia plano?

Según los comentarios de la otra respuesta, Maven proporciona un “árbol de dependencia plano”, no un “árbol de dependencia anidado” que NPM proporciona de forma predeterminada. Maven no permite múltiples versiones de la misma dependencia. Si sucede que se solicitan diferentes versiones, Maven usa la resolución de dependencias para elegir una sola versión. Esto significa que a veces sus dependencias transitivas obtendrán una versión diferente a la que requieren, pero hay formas de gestionar esto. Sin embargo, esta limitación proviene de Java, no de Maven, ya que (normalmente) en Java un cargador de clases solo proporcionará acceso a una única definición de clase incluso si se encuentran varias definiciones en la ruta de clases. Dado que Java no es particularmente bueno para manejar esto, Maven intenta evitar este escenario en primer lugar.

Nota: desde npm v3, las dependencias se aplanan. El hilo del administrador de paquetes alternativo también hace lo mismo.

Madurez

Además, Maven es considerablemente más antiguo que NPM, tiene una base de usuarios más grande, una gran cantidad de complementos personalizados y, hasta ahora, probablemente podría considerarse más maduro en general. A veces, Maven se usa para proyectos que no son de Java o incluso políglotas, ya que existen complementos para manejar otros lenguajes o entornos específicos, como Android. Hay complementos que unen a Maven y otras herramientas de compilación, como frontend-maven-plugin que en realidad maneja múltiples herramientas de compilación JS.

A continuación utilizo | separar entre maven | términos npm respectivamente:

Características comunes:

  • Ambas herramientas admiten búsqueda dinámica de dependencias ( artefactos | paquetes ) basado en un archivo descriptor pom.xml|package.json, y también te permite desplegar | publicar tu propio artefactos | paquetes.

  • Ambos tienen un público predeterminado repositorio | registro (http://repo.maven.apache.org/maven2/ | https://registry.npmjs.org), pero también se puede utilizar un tercero (a través de settings.xml|.npmrc ).

  • Ambos apoyan el concepto de dependencias de nivel de compilación (complementos | devDependencies utilizadas en scripts). * Maven apoya provided dependencias también, pero esto no parece aplicarse a npm, ya que javascript rara vez se implementa en contenedores.

  • Ambos admiten el espacio de nombres de dependencia: groupId|scope

Diferencias:

  • maven tiene un adicional repositorio local(cache):

    • No es necesario recuperar la misma dependencia para diferentes proyectos.
    • Otros proyectos locales pueden acceder automáticamente a los artefactos que se instalan localmente.
  • las dependencias de una compilación de proyecto en maven se descargan en /.m2. Con npm se descargan en /node_modules.

  • Construyendo en maven es comúnmente un proceso de un solo paso: mvn package (buscar departamentos, construir). En npm es un proceso de 2 pasos: npm install (buscar departamentos), npm build (construir)

  • maven define construir ciclos de vida (para construir, probar, implementar) consistió en fases, a las que se adjuntan las operaciones predeterminadas (objetivos del complemento), basado en diferentes opciones de empaque (.jar,.war,.ear etc). A continuación, puede sobrescribir estas operaciones o inyectar otras nuevas (a través del sistema de complementos). Esto proporciona una especie de solución lista para usar para compilar, documentar, probar, implementar, etc.
    El enfoque de npm es más simplista (ver: scripts)

  • Debido a lo anterior, npm se etiqueta como herramienta de gestión de paquetes para javascript mientras que maven está etiquetado como herramienta de gestión de dependencias y automatización de compilación para java.

  • En la configuración de maven, el proceso de construcción implica más comúnmente editando el pom.xml.
    En npm implica escribiendo código o configurando herramientas de construcción complementarias igual que gulp,webpack etc

  • Por alguna razón rangos de versiones definidos por los usuarios en los módulos npm, son mucho más suelto que en maven. Esto puede causar problemas con las dependencias transitivas, es por eso que recientemente se agregó un archivo adicional: package-lock.json

  • Con npm es mucho más sencillo de empezar un nuevo proyecto: npm init. Con maven, necesitas saber cómo escribir un mínimo pom.xmlo leer sobre arquetipos.

  • En general, es mucho más común editar pom.xml que package.json. P.ej agregando dependencias en maven está hecho a mano (o vía IDE) mientras está en npm a través de la línea de comando.

  • Al igual que con todas las herramientas de compilación, puede llamar a una herramienta desde dentro de la otra, pero creo que es mucho más común llamar npm desde dentro de maven, que al contrario.

  • npm admite dev, compilaciones de producción. En maven, esto debe definirse mediante perfiles.

si. es una herramienta de empaquetado similar para Java. buscar gradle también que te da más libertad con groovy language, pero para empezar puedes usar maven para organizar sus dependencias. las incluye como etiquetas allí y maven hace el trabajo por usted.

atraviesa el árbol de dependencias y descarga todos los archivos jar apropiados.

Eres capaz de añadir valor a nuestra información aportando tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *