[JAVA] Ich möchte ein schönes build.gradle schreiben

Was ich feststeckte oder nicht finden konnte, als ich build.gradle nachgeschlagen habe

Umgebung

--Gradle6.4 (veröffentlicht am 06.05.2020)

Am Anfang

Vorerst kann es sinnvoll sein, einen Blick auf [Gradles Dokumentation] zu werfen (https://docs.gradle.org/6.4/userguide/userguide.html).

Praktisches Plug-In

Namenslink zur Dokumentation

Verwenden Sie Wrapper

So etwas wie ". / Gradlew" oder ". / Gradlew.bat". Kann durch Ausführen der Wrapper-Task initialisiert und aktualisiert werden Damit ist es in Ordnung, wenn die in der Entwicklerumgebung installierte Version von gradle anders ist!

Offizielle Dokumentation: The Gradle Wrapper

Geben Sie die Codierung an

Wenn nicht angegeben, kann sich das Build-Ergebnis zwischen Linux und Windows ändern.

Wenn Sie beispielsweise UTF-8 angeben, sieht es so aus

build.gradle


//Kompilieren Sie die Java-Task-Codierung
compileJava.options.encoding = 'UTF-8'
//compileTest Java-Taskcodierung
compileTestJava.options.encoding = 'UTF-8'
//Javadoc-Task-Codierung
javadoc.options.encoding = 'UTF-8'

Abhängigkeitserklärung

** Verwenden Sie nicht compile oder testCompile, da diese veraltet sind ** Es gibt verschiedene Dinge wie "Implementierung" und "Testimplementierung", aber da es problematisch ist, das offizielle Dokument The Java Plugin Was ist "api"? Es ist in The Java Library Plugin geschrieben.

Eine kurze Erklärung compileOnly ist eine Abhängigkeit, die zur Kompilierungszeit erforderlich ist. Nicht in FatJar usw. enthalten (in Maven vorgesehener Umfang) runtimeOnly ist eine zur Laufzeit erforderliche Abhängigkeit. Es kann in FatJar usw. eingegeben werden, kann aber nicht aus dem Quellcode heraus referenziert werden (ich denke es ist, aber ich weiß es nicht, weil ich es nie benutzt habe). Implementierung ist eine erforderliche Abhängigkeit sowohl zur Kompilierung als auch zur Laufzeit. Es kann aus FatJar und aus dem Quellcode heraus referenziert werden, aber es kann nicht aus Projekten referenziert werden, die dies als Abhängigkeit haben (in Maven als "bereitgestellt" erkannt). Verwenden Sie das Java Library Plugin api, um es sichtbar zu machen

Auch diejenigen mit "test" am Anfang (z. B. "testImplementation") sind nur während des Tests gültig.

Geben Sie den Versionsbereich an

Die offizielle Dokumentation finden Sie hier: Deklarieren von Versionen und Bereichen

build.gradle


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

Wenn Sie dies tun, wird in 5.6. Unten die aktuellste Version zu diesem Zeitpunkt verwendet. Das Erstellungsergebnis kann sich je nach der aufgrund dieses Effekts erstellten Umgebung ändern. Wenn Sie dies verhindern möchten, wählen Sie Abhängigkeiten korrigieren.

Abhängigkeiten korrigieren

Die offizielle Dokumentation finden Sie hier: Sperren von Abhängigkeitsversionen

Führen Sie ErrorProne ein

Zu Plugins hinzufügen

build.gradle


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

Zur Abhängigkeit hinzufügen

build.gradle


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

Fügen Sie für Java8 den Java9-Compiler ein

build.gradle


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

Wenn Sie in einer Java 8-Umgebung oder Java 9 oder höher ausgeführt werden möchten, ist dies möglicherweise hilfreich

build.gradle


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

Es scheint, dass Javac ersetzt wird, so dass es auf alle Kompilierungsaufgaben angewendet wird

Führen Sie CheckStyle ein

Zu Plugins hinzufügen

build.gradle


plugins {
    id 'checkstyle'
}

Optimieren Sie config / checkstyle / checkstyle.xml. Zum Beispiel

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>

Offizielle Dokumentation sieht gut aus

Wenn Sie die Build-Task ausführen, wird sie ohne Berechtigung ausgeführt

Unit Test mit JUnit

Zur Abhängigkeit hinzufügen

build.gradle


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

Es wird schön sein, es so einzustellen

build.gradle


tasks.test {
    testLogging.showStandardStreams = true // System.Anzeige oder Fehler im Protokoll
    useJUnitPlatform()
    testLogging {
        events('passed', 'skipped', 'failed')
    }
}

JUnit 5 User Guide

Generiere Fat Jar (Uber Jar) mit dem Shadow Plug-In

Als Plug-In hinzufügen

build.gradle


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

Führen Sie die Aufgabe "shadowjar" aus und sie wird unter build / libs abgeschlossen

Sie können das Glas verschieben, minimieren und umbenennen, aber es ist ein Ärger, so die offizielle Dokumentation https://imperceptiblethoughts.com/shadow/introduction/

Generieren Sie einen durchsuchbaren Javadoc

build.gradle


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

Dadurch sieht die Javadoc-Aufgabe gut aus (erfordert Java 9 oder höher).

Recommended Posts

Ich möchte ein schönes build.gradle schreiben
Ich möchte einen Unit Test schreiben!
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Ich möchte eine Webanwendung entwickeln!
[Ruby] Ich möchte einen Methodensprung machen!
Ich möchte eine Struktur für die Ausnahmebehandlung entwerfen
Ich möchte schnell von Java nach SQLite schreiben
Ich möchte Zeichen konvertieren ...
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte eine bestimmte Datei mit WatchService überwachen
Ich möchte eine Funktion in der Rails Console definieren
So schreiben Sie ein benutzerorientiertes Programm (1)
Ich möchte in RSpec auf einen GoogleMap-Pin klicken
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
[Java] Ich möchte ein Byte-Array in eine Hexadezimalzahl konvertieren
Ich möchte einen relativen Pfad in einer Situation finden, in der Pfad verwendet wird
Ich möchte eine Produktinformationsbearbeitungsfunktion ~ part1 ~ implementieren
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte dem select-Attribut einen Klassennamen geben
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich möchte FireBase verwenden, um eine Zeitleiste wie Twitter anzuzeigen
Ich möchte eine Schleife schreiben, die auf einen Index mit der Stream-API von Java 8 verweist
Ich möchte rekursiv nach Dateien in einem bestimmten Verzeichnis suchen
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich möchte in der Lage sein, selbst reguläre Ausdrücke zu denken und zu schreiben. ..
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Ich möchte Swipeback auf einem Bildschirm verwenden, der XLPagerTabStrip verwendet
Ich möchte nur Java mit Eclipse auf meinem Mac schreiben
Ich habe versucht, Code wie eine Typdeklaration in Ruby zu schreiben
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
Eine flüssige Schnittstelle? -Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 3 [C # Refactoring Sample]
Ich möchte doppelte Fehlermeldungen beseitigen
Ich möchte eine ios.android App machen
[Basic] So schreiben Sie ein Dockerfile Selbstlernend ②
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
[Einführung in Java] So schreiben Sie ein Java-Programm
Ich möchte PHP 7.2 unter Ubuntu 20.04 installieren.
Ich möchte Java-Updates insgesamt stoppen
Ich möchte @Autowired in Servlet verwenden
Ich möchte statische Felder auf @Autowired ausrichten
Ich möchte die Teamentwicklung aus der Ferne durchführen
[SpringBoot] So schreiben Sie einen Controller-Test
[Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden