whats tag pom for finalname java json node.js maven npm

java - pom - maven tag repository



¿Maven es similar a npm? (4)

¿La misma herramienta, idioma diferente?

Maven es la herramienta de resolución de dependencia y compilación más popular para Java, al igual que NPM para JS. Pero no es solo la misma herramienta para un idioma diferente. Obviamente, hay grandes diferencias entre las compilaciones Java y JS, y estas diferencias son directamente visibles en la forma en que opera Maven. Por ejemplo, si bien muchas herramientas JS dependen de Git para hacer un trabajo pesado, Maven trabaja con repositorios Maven personalizados basados ​​en el sistema de archivos, ya que Maven es anterior a Git y necesita manejar artefactos binarios, que Git históricamente no manejó 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 confiar en los complementos. La ventaja es que puede ser más fácil entender otras compilaciones simplemente mirando pom.xml , ya que generalmente siguen el mismo enfoque sin demasiada personalización. Gradle es una herramienta popular 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 "sin script".

Hacer referencia a sus dependencias

De manera similar a package.json , no trabaja con pom.xml de su dependencia directamente, sino que define las coordenadas de dependencia y deja 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 en la otra respuesta, Maven proporciona un "árbol de dependencia plano", no un "árbol de dependencia anidado" que NPM proporciona de manera predeterminada. Maven no permite múltiples versiones de la misma dependencia. Si sucede que se solicitan diferentes versiones, Maven usa la resolución de dependencia para elegir una sola versión. Esto significa que a veces sus dependencias transitivas obtendrán una versión diferente de la que requieren, pero hay formas de administrar 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 el classpath. Como 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 Java o incluso políglotas, ya que hay complementos para manejar otros lenguajes o entornos específicos, como Android. Hay complementos que unen Maven y otras herramientas de compilación, como frontend-maven-plugin que en realidad maneja múltiples herramientas de compilación JS.

Como he trabajado con npm, que busca dependencias en el archivo package.json y lo descarga por usted. Del mismo modo, veo un archivo pom.xml en un proyecto Java. ¿Maven busca en este archivo y descarga dependencias para mí? ¿Puedo pasar este archivo pom.xml como package.json, en lugar de dar los frascos de dependencia? ¿Son similares estas herramientas y solo se crean para diferentes plataformas?


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

Características comunes:

  • Ambas herramientas admiten la recuperación dinámica de dependencias ( artefactos | paquetes ) basadas en un archivo descriptor pom.xml | package.json , y también le permite implementar | publica tus propios artefactos | paquetes

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

  • Ambos admiten el concepto de dependencias de nivel de compilación (complementos | DevDependencies utilizados en scripts) . * Maven también admite dependencias provided , pero esto no parece aplicarse a npm, ya que raramente se implementa JavaScript en contenedores.

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

Diferencias:

  • maven tiene un repositorio local adicional (caché):

    • No es necesario recuperar de nuevo la misma dependencia para diferentes proyectos.
    • Los artefactos que se instalan localmente son accesibles automáticamente por otros proyectos locales.
  • las dependencias del proyecto una compilación en maven se descargan en <homedir>/.m2 . Con npm se descargan en <projectdir>/node_modules .

  • Construir en Maven es comúnmente un proceso de un solo paso : mvn package (buscar departamentos, compilar). En npm se trata de un proceso de 2 pasos: npm install (fetch deps), npm build (build)

  • maven define los ciclos de vida de la construcción (para construir, probar, implementar) consistió en fases, a las que se adjuntan las operaciones predeterminadas (objetivos del complemento) , en función de diferentes opciones de empaque ( .jar , .war , .ear , etc.). Luego 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 el enfoque de compilación, documentación, prueba, implementación, etc. npm es más simplista (ver: scripts )

  • En la configuración de Maven, el proceso de compilación más comúnmente implica editar el pom.xml . En npm implica escribir código .

  • Por alguna razón , los rangos de versión definidos por los usuarios en los módulos npm son mucho más flexibles 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 comenzar un nuevo proyecto: npm init . Con Maven, necesita saber cómo escribir un pom.xml mínimo o leer sobre arquetipos.

  • En general, es mucho más común editar pom.xml que package.json . Por ejemplo, la adición de dependencias en maven se realiza manualmente (o mediante IDE) mientras que en npm mediante la línea de comandos .

  • 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 a npm desde dentro de maven , que lo contrario.

  • npm admite dev, compilaciones de producción . En Maven, esto debe definirse a través de perfiles .


Sí, lo mismo con Gradle, pero no son fáciles de usar como npm.


sí. Es una herramienta de empaque similar para Java. busque gradle también, que le da más libertad con un groovy language , pero para comenzar, puede usar maven para organizar sus dependencias. los incluye como etiquetas allí y Maven hace el trabajo por usted.

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