[JAVA] Je veux écrire un joli build.gradle

Ce que je suis resté coincé ou que je n'ai pas trouvé lorsque j'ai recherché build.gradle

environnement

--Gradle6.4 (publié le 6/05/2020)

Au début

Pour le moment, il peut être bon de jeter un œil à la documentation de Gradle.

Plug-in pratique

Nom du lien vers la documentation

Utiliser Wrapper

Quelque chose comme . / Gradlew ou. / Gradlew.bat. Peut être initialisé et mis à jour en exécutant la tâche wrapper Avec cela, ce n'est pas grave si la version de gradle installée dans l'environnement du développeur est différente!

Documentation officielle: The Gradle Wrapper

Spécifiez l'encodage

S'il n'est pas spécifié, le résultat de la construction peut changer entre Linux et Windows.

Par exemple, lorsque vous spécifiez UTF-8, cela ressemble à ceci

build.gradle


//compiler l'encodage des tâches Java
compileJava.options.encoding = 'UTF-8'
//encodage de tâche Java compileTest
compileTestJava.options.encoding = 'UTF-8'
//encodage de tâches javadoc
javadoc.options.encoding = 'UTF-8'

Déclaration de dépendance

** N'utilisez pas compile ou testCompile car ils sont obsolètes ** Il y a diverses choses telles que ʻimplementation et testImplementation`, mais comme c'est gênant, le document officiel The Java Plugin Qu'est-ce que «api»? Il est écrit dans The Java Library Plugin

Une brève explication compileOnly est une dépendance requise au moment de la compilation. Non inclus dans FatJar etc. (portée provided dans Maven) runtimeOnly est une dépendance requise lors de l'exécution. Il peut être entré dans FatJar etc., mais il ne peut pas être référencé à partir du code source (je pense que c'est le cas, mais je ne le sais pas car je ne l'ai jamais utilisé) ʻImplementation est une dépendance requise à la fois à la compilation et à l'exécution. Il peut être référencé depuis FatJar et depuis le code source, mais il ne peut pas être référencé à partir de projets qui l'ont comme dépendance (reconnu comme «fourni» dans Maven). Utilisez le plugin de bibliothèque Java ʻapi pour le rendre visible

De plus, ceux avec «test» au début (par exemple, «testImplementation») ne sont valides que pendant les tests.

Spécifiez la plage de versions

La documentation officielle est ici: Déclarer des versions et des plages

build.gradle


testImplementation 'org.junit.jupiter:junit-jupiter:5.6.+'

Si vous le faites, la version 5.6 ci-dessous utilisera la dernière version à ce moment-là. Le résultat de la construction peut changer en fonction de l'environnement créé en raison de cet effet, donc si vous voulez l'empêcher, [Corriger les dépendances](#Fix Dépendances))

Corriger les dépendances

La documentation officielle est ici: Verrouillage des versions de dépendance

Introduire ErrorProne

Ajouter aux plugins

build.gradle


    id 'net.ltgt.errorprone' version '1.1.1'

Ajouter à la dépendance

build.gradle


dependencies {
    // ErrorProne
    errorprone 'com.google.errorprone:error_prone_core:2.+'
}

Pour Java8, insérez le compilateur Java9

build.gradle


dependencies {
    errorproneJavac 'com.google.errorprone:javac:9+181-r4173-1'
}

Si vous voulez pouvoir fonctionner dans un environnement Java 8 ou Java 9 ou supérieur, cela peut être bon

build.gradle


if (!JavaVersion.current().isJava9Compatible()) {
    dependencies {
        errorproneJavac 'com.google.errorprone:javac:9+181-r4173-1'
    }
}

Il semble que javac sera remplacé, il sera donc appliqué à toutes les tâches de compilation

Présentez CheckStyle

Ajouter aux plugins

build.gradle


plugins {
    id 'checkstyle'
}

Ajustez config / checkstyle / checkstyle.xml. Par exemple

checkstyle.xml


<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
          "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
          "https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
    <module name="FileTabCharacter"/>
    <module name="TreeWalker">
        <module name="Indentation">
            <property name="lineWrappingIndentation" value="8"/>
        </module>
        <!-- Imports -->
        <module name="UnusedImports"/>
        <module name="RedundantImport"/>
        <module name="ImportOrder">
            <property name="separated" value="true"/>
            <property name="sortStaticImportsAlphabetically" value="true"/>
        </module>
        <!-- Brackets -->
        <module name="LeftCurly"/>
        <module name="RightCurly"/>
        <module name="NeedBraces"/>
    </module>
</module>

La documentation officielle semble bonne

Si vous exécutez la tâche de construction, elle sera exécutée sans autorisation

Test unitaire avec JUnit

Ajouter à la dépendance

build.gradle


testImplementation 'org.junit.jupiter:junit-jupiter:5.6.+'

Ce sera bien de le définir comme ça

build.gradle


tasks.test {
    testLogging.showStandardStreams = true // System.Afficher ou se tromper dans le journal
    useJUnitPlatform()
    testLogging {
        events('passed', 'skipped', 'failed')
    }
}

JUnit 5 User Guide

Générer Fat Jar (Uber Jar) à l'aide du plug-in shadow

Ajouter en tant que plug-in

build.gradle


plugins {
    id 'com.github.johnrengelman.shadow' version '5.2.0'
}

Exécutez la tâche shadowjar et elle sera complétée sous build / libs

Vous pouvez déplacer, réduire et renommer le pot, mais c'est un problème, donc la documentation officielle https://imperceptiblethoughts.com/shadow/introduction/

Générer un Javadoc interrogeable

build.gradle


javadoc {
    if(JavaVersion.current().isJava9Compatible()) {
        options.addBooleanOption('html5', true)
    }
}

Cela donne une bonne apparence à la tâche javadoc (nécessite Java 9 ou supérieur)

Recommended Posts

Je veux écrire un joli build.gradle
Je veux écrire un test unitaire!
Je veux écrire une simple répétition d'une chaîne de caractères
Je souhaite développer une application web!
[Ruby] Je veux faire un saut de méthode!
Je souhaite concevoir une structure pour la gestion des exceptions
Je veux écrire rapidement de java vers sqlite
Je veux convertir des caractères ...
Je veux utiliser une petite icône dans Rails
Je souhaite surveiller un fichier spécifique avec WatchService
Je souhaite définir une fonction dans la console Rails
Pour écrire un programme orienté utilisateur (1)
Je veux cliquer sur une broche GoogleMap dans RSpec
Je souhaite créer une annotation générique pour un type
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
[Java] Je souhaite convertir un tableau d'octets en un nombre hexadécimal
Je veux trouver un chemin relatif dans une situation où Path est utilisé
Je souhaite implémenter une fonction d'édition des informations produit ~ part1 ~
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
Je veux faire une liste avec kotlin et java!
Je veux appeler une méthode et compter le nombre
Je veux créer une fonction avec kotlin et java!
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Je veux donner un nom de classe à l'attribut select
Je veux créer un fichier Parquet même en Ruby
Je souhaite utiliser FireBase pour afficher une chronologie comme Twitter
Je veux écrire une boucle qui fait référence à un index avec l'API Stream de Java 8
Je souhaite rechercher de manière récursive des fichiers dans un répertoire spécifique
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
Je veux pouvoir penser et écrire moi-même des expressions régulières. ..
Je souhaite ajouter une fonction de navigation avec ruby on rails
Je souhaite utiliser le balayage arrière sur un écran qui utilise XLPagerTabStrip
Je veux juste écrire Java en utilisant Eclipse sur mon Mac
J'ai essayé d'écrire du code comme une déclaration de type en Ruby
Je veux extraire entre des chaînes de caractères avec une expression régulière
Une interface fluide? -Je veux vous donner l'occasion d'écrire du bon code. 3 [Exemple de refactoring C #]
Je souhaite éliminer les messages d'erreur en double
Je veux créer une application ios.android
[Basique] Comment écrire un auto-apprentissage Dockerfile ②
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
[Introduction à Java] Comment écrire un programme Java
Je souhaite installer PHP 7.2 sur Ubuntu 20.04.
Je veux arrêter complètement les mises à jour Java
Je veux utiliser @Autowired dans Servlet
Je souhaite cibler les champs statiques sur @Autowired
Je veux faire du développement d'équipe à distance
[SpringBoot] Comment écrire un test de contrôleur
[Rails] Je souhaite envoyer des données de différents modèles dans un formulaire