Después de renunciar a Maven, lo usé. . .

Traslado desde: Le Baichuan

Enlace: http://toutiao.com/i6824937779193971207

Creo que todos los estudiantes que usan Java han usado Maven, que es una herramienta de construcción de proyectos muy clásica y fácil de usar. Pero si usa mucho Maven, puede encontrar que Maven se siente incómodo en algunos lugares:

1. El archivo de configuración de Maven está en formato XML, si su proyecto depende de más paquetes, el archivo XML será muy, muy largo;

2. Los archivos XML no son muy flexibles, si necesita agregar alguna lógica personalizada durante el proceso de construcción, será muy problemático;

3. Maven es muy estable, pero la relativa falta de soporte para la nueva versión de java, incluso si se trata de compilar java11, es necesario actualizar el complemento Maven incorporado.

Si siente estas deficiencias de Maven y está listo para probar otras herramientas de compilación, puede probar gradle, que es una nueva herramienta de compilación de Java que resuelve algunos de los puntos débiles de Maven.

Uno, instala Gradle

El método de instalación más tradicional es descargar el paquete binario del sitio web oficial de gradle, descomprimirlo y luego agregar la ruta a la variable de entorno. Si no tiene otros requisitos, puede utilizar este método de instalación. Sin embargo, gradle es un proyecto muy de moda, se lanzará una nueva versión cada pocos meses, este método puede no mantenerse al día con la velocidad de actualización de gradle.

Así que recomiendo usar un administrador de paquetes para instalar gradle. Si usa un sistema Linux, no tiene que decir más. Si usa Windows, le recomiendo usar el administrador de paquetes scoop para instalar gradle. Es fácil de instalar, utiliza el directorio SHIM para administrar las variables de entorno y también es muy conveniente configurar gradle en varias herramientas.

Por supuesto, si no te gusta instalar tantas cosas complicadas, también puedes usar gradle. Gradle proporciona una herramienta llamada gradle wrapper, que puede usar gradle sin tener gradle instalado. Bueno, en realidad es un archivo de secuencia de comandos. Cuando ejecuta la secuencia de comandos contenedora, si la secuencia de comandos encuentra que no hay gradle en su computadora, automáticamente descargará e instalará uno por usted. Ahora incluso hay un contenedor de Maven, que también es un archivo de script que puede instalar Maven automáticamente.

Creo que algunos amigos han oído hablar de Gradle antes y luego intentaron usarlo, pero debido a que la velocidad es demasiado lenta, finalmente se rindieron. También dejé el gradle por un tiempo debido a su velocidad. Pero ahora es mucho más conveniente usar gradle. Gradle se inauguró oficialmente en China, CDN, la velocidad de descarga es muy rápida cuando se usa el contenedor gradle. Se puede decir que ahora es un buen momento para aprender a usar gradle.

 

Dos, usa envoltorio gradle

Aquí uso IDEA para crear y usar proyectos gradle.

IDEA usa gradle wrapper para crear proyectos de forma predeterminada, por lo que puede ejecutarse normalmente sin instalar gradle. En este momento, la estructura del proyecto debe ser similar a la que se muestra en la figura siguiente. Los estudiantes que usan Maven deben estar familiarizados con ella, ya que es casi idéntica a la estructura del proyecto Maven. La carpeta gradle y los archivos gradlew son los archivos de envoltura de gradle, y el archivo de sufijo .gradle es el archivo de configuración de gradle, que corresponde al pom.xml de Maven.

Una de las ventajas de gradle wrapper es que puedes personalizar la versión gradle descargada. Si es una colaboración en equipo, esta función es muy conveniente. Una configuración simple puede unificar la versión de la herramienta de construcción del equipo. Aquí lo configuro con la última versión de gradle 6.4. La descarga e instalación predeterminada es la versión bin, que solo contiene binarios. Si usa IDEA, le recomendará descargar la versión completa, incluido el código fuente, para que IDEA pueda analizar el código fuente y proporcionar un soporte de script Gradle más preciso.

 

Tres, gestión de la dependencia

Echemos un vistazo a la función de administración de dependencias de gradle, que puede considerarse como uno de los propósitos principales del uso de herramientas de compilación. Esta es también una de las ventajas de gradle sobre maven. En comparación con una larga lista de configuraciones XML en maven, las dependencias de gradle solo necesitan una línea.

dependencies {
    testImplementation 'junit:junit:4.13'
    implementation 'com.google.code.gson:gson:2.8.6'
}

Aquí recomiendo el sitio web de búsqueda de paquetes de Jetbrains, que es el mejor sitio web para encontrar paquetes de dependencias para maven y gradle.Puedes buscar y usar dependencias muy fácilmente.

En comparación con Maven, el control granular de la dependencia de gradle es más refinado. Maven solo tiene cuatro ámbitos: compilación, provisión, prueba y tiempo de ejecución, mientras que gradle tiene los siguientes ámbitos:

1.implementation, el alcance predeterminado. El alcance de la implementación incluirá dependencias durante la compilación y el tiempo de ejecución, pero no estará expuesto al tiempo de compilación de los usuarios de la biblioteca de clases. Por ejemplo, si nuestra biblioteca de clases incluye gson, cuando otras personas usen nuestra biblioteca de clases, no habrá dependencia de gson en el momento de la compilación.

2. Api, similar a la implementación, es una dependencia que es visible tanto en la compilación como en el tiempo de ejecución. Pero api nos permite exponer las dependencias de nuestra biblioteca de clases a los usuarios de nuestra biblioteca de clases.

3. CompileOnly y runtimeOnly, como sugiere el nombre, uno solo es visible en tiempo de compilación y el otro solo es visible en tiempo de ejecución. Y runtimeOnly y los proporcionados por Maven son relativamente cercanos.

4. testImplementation, esta dependencia es visible en tiempo de compilación de prueba y tiempo de ejecución, similar al alcance de prueba de Maven.

5. testCompileOnly y testRuntimeOnly, estos dos son similares a compileOnly y runtimeOnly, pero se utilizan para el tiempo de compilación de prueba y el tiempo de ejecución.

A través de una configuración de dependencia breve y concisa y una variedad de roles y opciones, Gradle puede proporcionarnos mejores funciones de administración de dependencias que Maven.

 

Cuatro, tareas y complementos de Gradle

El archivo de configuración de gradle es un archivo de script maravilloso, en el que podemos personalizar algunas tareas de compilación mediante programación. Debido al uso de la programación, esto nos brinda una gran flexibilidad y conveniencia. Por ejemplo, ahora existe una demanda para ver el tamaño del archivo jar cuando se empaqueta. Simplemente escriba algunas líneas de código en el script de compilación en gradle. En Maven, debe escribir complementos de Maven y la complejidad no está al mismo nivel.

Por supuesto, desde el desarrollo de Maven, ha habido una gran cantidad de complementos que brindan una variedad de funciones para usar. Pero todavía no se puede comparar con Gradle en términos de flexibilidad. Y Gradle también tiene funciones de complemento, y ahora se está desarrollando muy rápido. Hay una gran cantidad de complementos muy útiles, como los complementos gretty. Gretty era originalmente un complemento de la comunidad y luego fue absorbido por el gobierno como un complemento oficial. Puede ejecutar proyectos web en servidores Tomcat y jetty y es más potente que los complementos relacionados con Maven.

Aunque gradle puede escribir tareas de scripts personalizados de manera muy flexible, en general, no necesitamos escribir scripts de compilación y podemos usar complementos y tareas existentes para completar funciones relacionadas. En IDEA, también puede ver fácilmente cuántas tareas hay en el proyecto gradle actual. Tareas básicas como compilar, probar, etc. Maven y Gradle están conectados.

Cinco, configurar la duplicación

La velocidad de descarga del almacén oficial de Maven es muy lenta, por lo que generalmente tenemos que configurar la fuente del espejo doméstico. Gradle es totalmente compatible con Maven a este respecto, por lo que solo necesita configurar un poco la fuente de espejo para usar la duplicación de Maven. Si ha creado un proyecto con gradle, debería poder ver la configuración relevante y el caché de gradle en la carpeta .gradle del directorio de usuario.

El gradle descargado por el contenedor antes también se almacena en esta carpeta, la ubicación es contenedor / dists.

La caché local dependiente está en la carpeta caches \ modules-2 \ files-2.1. La estructura del directorio es similar a la caché local de Maven, tanto el nombre del paquete como el número de versión, pero el último nivel de la estructura del directorio gradle es diferente de Maven, lo que hace que no puedan compartir la caché local.

Más cerca de casa, para configurar la imagen de descarga en gradle, debe crear un nuevo script de inicialización init.gradle directamente en la carpeta .gradle. El contenido del archivo de script es el siguiente. De esta forma, cuando gradle descargue el espejo, descargará la fuente del espejo configurada aquí, que será mucho más rápido. Además, gradle wrapper ha establecido un CDN en China, y ahora la velocidad de uso de gradle debería ser muy rápida.

allprojects {
   repositories {
       maven {
           url "https://maven.aliyun.com/repository/public"
       }
       maven {
           url "https://maven.aliyun.com/repository/jcenter"
       }
       maven {
           url "https://maven.aliyun.com/repository/spring"
       }
       maven {
           url "https://maven.aliyun.com/repository/spring-plugin"
       }
       maven {
           url "https://maven.aliyun.com/repository/gradle-plugin"
       }
       maven {
           url "https://maven.aliyun.com/repository/google"
       }
       maven {
           url "https://maven.aliyun.com/repository/grails-core"
       }
       maven {
           url "https://maven.aliyun.com/repository/apache-snapshots"
       }
   }
}

Por supuesto, si tiene un proxy, le recomiendo que configure directamente un proxy global para gradle. Debido a que el script de Gradle es tan flexible, algunos scripts pueden depender de scripts remotos de github u otros lugares. En este momento, la fuente de espejo de descarga establecida anteriormente no funciona.

Por lo tanto, si es posible, es mejor utilizar el proxy global directamente. El método de configuración es muy simple. Cree un nuevo archivo gradle.properties en la carpeta .gradle con el siguiente contenido. Las pocas líneas del medio son los elementos de configuración para configurar el proxy. Por supuesto, también te sugiero que establezcas las otras pocas líneas. Configura la codificación del archivo de tiempo de ejecución de gradle en UTF8 para aumentar la compatibilidad entre plataformas. Para obtener más artículos sobre herramientas, sigue el número de suscripción de WeChat.

org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10800
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=10800
systemProp.file.encoding=UTF-8
org.gradle.warning.mode=all


 

6. ¿Por qué usar gradle?

Al ver esto, debe tener un conocimiento básico de gradle y también puede usarlo en sus proyectos. Pero si ya está familiarizado con Maven, es posible que se muestre reacio a usar gradle porque parece innecesario. Pero desde que apareció Gradle, significa que muchas personas todavía tienen ciertas opiniones sobre Maven. Así que aquí resumiré las ventajas de gradle en comparación con maven.

1. Velocidad, gradle usa build cache, daemon y otros métodos para mejorar la velocidad de compilación. El resultado es que la velocidad de compilación de gradle es mucho más rápida que la de maven, y la velocidad de compilación promedio es varias veces más rápida que la de Maven, y cuanto más grande es el proyecto, más obvia es la brecha.

2. Flexibilidad, Gradle es mucho más flexible que Maven, aunque la flexibilidad a veces no es algo bueno. Pero en la mayoría de los casos, ser flexibles nos puede facilitar mucho. El enfoque rígido de archivos XML de Maven es muy problemático. Muchos proyectos de Maven completan algunas tareas que requieren flexibilidad mediante la ejecución de scripts externos. En gradle, el archivo de configuración es el script de compilación y el script de compilación es el lenguaje de programación (lenguaje de programación maravilloso), que es completamente autosuficiente sin scripts externos.

3. Simplicidad, para lograr la misma función, la longitud del script gradle es mucho más corta que la longitud del archivo de configuración de maven. Aunque mucha gente dice que XML no es problemático de mantener, creo que mantener un archivo XML con unos cientos de líneas de dependencias no es necesariamente más fácil que un script de Gradle.

Tal vez por las razones que dije anteriormente, tal vez haya otras razones, una cosa que debo admitir es que gradle como herramienta emergente se ha utilizado ampliamente. Proyectos como Spring se han cambiado de Maven a Gradle. Solo se admite gradle para el desarrollo de Android. Entonces, no importa si necesita cambiar el proyecto de maven a gradle ahora, pero al menos aprender gradle es algo necesario.

Tiempo de bienestar

TIEMPO DE REGALO

El enlace de entrega mensual del libro está aquí nuevamente

Gracias por su continua compañía y apoyo.

Te regalamos 5 libros hoy

Patrocinado por BlogView

No se requiere comentario ni reenvío para esta entrega

Utilice el método de lotería más justo.

Preste atención a la cuenta pública: sitio de entrevistas para programadores

Respuesta entre bastidores de la cuenta oficial: enviar libro 

Para participar en la lotería


往期推荐

El hermano H fue entrevistado por la hermana pequeña de Ali Technology y habló sobre estas cosas.

Después de desconectar el tubo de oxígeno de Tencent Weibo, ¿podrá Sina Weibo escapar de la crisis de la mediana edad?

Siempre he pensado que contar (1) es más efectivo que contar (*), que es despreciado por mis compañeros.

Este artículo es proporcionado por el soporte técnico de "Yiban Editor"

 

Enfrentando el problema 329 de Java: ¿Qué comando puede monitorear diversa información de estado operativo de la máquina virtual?

Simultaneidad en profundidad Problema 013: Ampliación de la optimización de bloqueo sincronizado

Si te gusta este artículo,

Mantenga presionado el código QR para seguir a Hollis. 

Reenviar al círculo de amigos es mi mayor apoyo.

Click  para ver 

Como es un sentimiento

Mirar es una especie de apoyo

↘↘↘

Supongo que te gusta

Origin blog.csdn.net/hollis_chuang/article/details/108675335
Recomendado
Clasificación