Das ist Kohlegebirgswasser, guten Abend.
Ich würde gerne versuchen, verschiedene Dinge mit Spring Boot selbst zu machen, aber als vorläufige Vorbereitung habe ich ein Memorandum zusammengestellt, um es an den Punkt zu bringen, an dem die Entwicklung beginnen kann.
Es gibt viele andere Artikel darüber, wie man IntelliJ installiert und wie man das JDK einfügt, also werde ich es Ihnen geben, aber wenn es eine Kombination aus IntelliJ + Gradle + SpringBoot + JUnit5 (Jupiter) ist, werde ich auf verschiedene Arten stolpern, damit ich nicht jedes Mal stolpere, damit ich nicht stolpere. Ich fühle mich wie ich gehe.
--IntelliJ wurde installiert
File > New > Project
Überprüfen Sie Gradle und Java
GroupId und ArtifactId sind optional
Ich denke, dieser Bereich ist Ihre Wahl.
Keine Notwendigkeit zum Umschreiben
warten
Es sollte so aussehen.
Ich möchte Spring verwenden, also werde ich build.gradle neu schreiben.
plugins {
id 'java'
}
group 'net.tan3sugarless.clustering-sample'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
Unmittelbar nach dem Erstellen des Projekts sollte es so aussehen.
buildscript {
ext {
springBootVersion = '2.1.6.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'idea'
group 'net.tan3sugarless.clustering-sample'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
Ich habe mit Buildscript herumgespielt, Plugin angewendet, Abhängigkeiten. Außerdem lösche ich Plugins. Sie können es verlassen ...
Lassen Sie dann die Controller-Klasse als Zugriffspunkt fungieren, auf den tatsächlich über das Web zugegriffen wird.
Vorerst werde ich es schaffen, weil ich zu diesem Zeitpunkt noch nicht einmal ein Paket habe.
Klicken Sie in der Projektstruktur mit der rechten Maustaste auf src / main / java und wählen Sie Neu> Paket, um ein Paket zu erstellen.
Geben Sie den Paketnamen auf dem sich öffnenden Bildschirm ein.
Das Paket ist fertig. Klicken Sie erneut mit der rechten Maustaste auf das fertige Paket und öffnen Sie Neu> Java-Klasse.
Erstellen Sie zunächst eine Anwendungsklasse auf dem geöffneten Bildschirm. Warten Sie eine Minute auf den Controller.
package net.tan3sugarless.clusteringsample;
public class ClusteringSampleApplication {
}
Dann wird eine saubere Klasse erstellt. Fügen wir dieser Beschreibung die Beschreibung von Spring als Anwendungsklasse hinzu.
Durch Ausführen dieser Anwendungsklasse werden die Funktionen als Webserveranwendung gestartet, einschließlich der Controller-Klasse, die in Zukunft hinzugefügt wird.
package net.tan3sugarless.clusteringsample;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ClusteringSampleApplication {
public static void main(String[] args) {
SpringApplication.run(ClusteringSampleApplication.class, args);
}
}
Bitte schreiben Sie es so um. Ersetzen Sie "Clustering Sample Application" durch Ihren eigenen Klassennamen.
Jetzt ist es endlich die Controller-Klasse.
Erstellen Sie außerdem ein Controller-Paket auf die gleiche Weise wie zuvor. Es muss nicht separat sein, aber Sie können eine klebrige Klasse direkt darunter platzieren. .. ..
Erstellen wir also eine "DemoController" -Klasse, indem wir das gleiche Verfahren wie die Application-Klasse befolgen.
package net.tan3sugarless.clusteringsample.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/demo")
public String demo(){
return "Hello SpringBoot demo!";
}
}
Die Klasse, die ich gemacht habe, sieht so aus. Vorerst muss ich nur etwas zurückgeben, also benutze RestController. Es ist einmal ein Pass, um json ernsthafter zurückzukehren. Zeigen Sie eine Textnachricht an.
Wenn Sie einen Controller haben, klicken Sie mit der rechten Maustaste auf die Anwendungsklasse und führen Sie sie aus.
Wenn die Controller-Anzeigen gestartet sind, ist sie aktiv.
Es ist wirklich cool, den Befehl curl oder den API-Tester zu verwenden, aber vorerst über den Browser
http://localhost:8080/demo
Wenn Sie hier zugreifen und die Zeichenfolge genau so anzeigen können, wie sie im Code geschrieben ist, sind Sie erfolgreich!
Ich möchte vorstellen, dass es wirklich für Lombok oder Futu verwendet wird, aber ich werde es einmal weglassen.
Ich möchte häufig Tests schreiben, bereite mich also so schnell wie möglich auf JUnit 5 vor.
Es gibt immer noch viele Informationen zu JUnit4, wenn ich das Netz fange, aber ich kann nicht ohne parametrisierten Test leben, also setze ich JUnit5 (Jupiter).
Grundsätzlich lese ich hier, aber ich werde versuchen, es selbst als Memorandum zu schreiben.
Baeldung | Using JUnit 5 with Gradle https://www.baeldung.com/junit-5-gradle
Zuerst muss ich JUnit aktivieren, also werde ich es hinzufügen, um Gradle zu erstellen.
buildscript {
ext {
springBootVersion = '2.1.6.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'idea'
group 'net.tan3sugarless.clustering-sample'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compileOnly "org.projectlombok:lombok:1.18.8"
testCompileOnly "org.projectlombok:lombok:1.18.8"
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
// for JUnit
testCompile 'org.junit.jupiter:junit-jupiter-api:5.3.2'
testCompile 'org.junit.jupiter:junit-jupiter-params:5.3.2'
testCompile 'org.junit.jupiter:junit-jupiter-engine:5.3.2'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.3.2'
}
// for JUnit
test {
useJUnitPlatform {
includeEngines 'junit-jupiter'
}
}
Der Code mit dem Kommentar "für JUnit" hinzugefügt
Solange Sie bestätigen können, dass es ausgeführt wurde, wäre es schön, wenn Sie nur die Assertion sehen könnten, abgesehen von der Erstellung der zu testenden Methode.
Es ist nicht sinnvoll, alle Pakete zu haben, da wir nicht die zu testende Methode erstellen, aber irgendwie erstellen wir dasselbe Paket wie src / main / java in src / test / java.
Erstellen Sie vorerst eine Testklasse mit einem passenden Namen.
package net.tan3sugarless.clusteringsample.controller;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.stream.Stream;
public class DemoTest {
static Stream<Arguments> demoProvider(){
return Stream.of(
Arguments.of(1,1,2),
Arguments.of(2,2,4)
);
}
@ParameterizedTest
@MethodSource("demoProvider")
@DisplayName("Parametrisierte Testdemo")
void demo(int i, int j, int expected){
Assertions.assertEquals(expected,i+j);
}
@Test
void fail(){
Assertions.fail();
}
}
Es ist ein sehr bedeutungsloser Test, aber bitte verzeihen Sie mir, weil es eine Demo ist.
Außerdem lasse ich es absichtlich los, um zu sehen, ob es richtig funktioniert.
Klicken Sie mit der rechten Maustaste auf test / java und führen Sie Test ausführen in ... Der Test läuft in allen Fällen.
Wie erwartet hat die fail () -Methode das Problem behoben.
Das ist es.
Ich wollte TestRunner unbedingt von Gradle ändern oder es ermöglichen, Erfolgsfälle zu überprüfen, aber das war's für heute.
Ich hoffe ich kann es zu einem anderen Zeitpunkt erklären.
Ich mache auch Twitter. ( Twitter @tan3_sugarless)