[JAVA] [Jakarta EE 8 Anwendungsentwicklung mit Gradle] 2. Projekterstellung

Einführung

Dieser Artikel ist eine Fortsetzung von [Jakarta EE 8-Anwendungsentwicklung mit Gradle] 1. Umgebungskonstruktion. Im vorherigen Artikel haben wir eine Entwicklungsumgebung erstellt. In diesem Artikel erstellen wir ein Gradle-Projekt.

Eclipse Gradle-Einstellungen

Nehmen Sie bei Verwendung des Gradle-Projekts in Eclipse die folgenden Einstellungen vor, um den in den vorherigen Umgebungseinstellungen installierten Gradle zu verwenden. Starten Sie Eclipse, öffnen Sie Fenster> Einstellungen, wählen Sie Gradle und nehmen Sie die folgenden Änderungen vor:

Artikel Inhalt
Lokales Installationsverzeichnis Gradle-Installationsordner
Java Home Jakarta EE 8

image.png

Klicken Sie nach dem Vornehmen von Änderungen auf Übernehmen und schließen.

Erstellen eines Gradle-Projekts

Es gibt zwei Möglichkeiten, ein Gradle-Projekt zu erstellen: Die eine besteht darin, Eclipse zu verwenden, und die andere darin, es in der Befehlszeile zu erstellen. Ich werde jeden von ihnen vorstellen.

Erstellen Sie ein Gradle-Projekt in Eclipse

Klicken Sie in Eclipse auf Datei> Neu> Gralde-Projekt. image.png

Geben Sie den Projektnamen ein und klicken Sie auf Weiter. image.png

Lassen Sie die Einstellungen unverändert und klicken Sie auf Weiter. image.png

Nach einer Weile wird der folgende Bildschirm angezeigt: Klicken Sie auf Fertig stellen. image.png

Das Gradle-Projekt wird erstellt und im Paket-Explorer angezeigt. image.png

Erstellen Sie ein Gradle-Projekt in der Befehlszeile

Öffnen Sie die Befehlszeile und wechseln Sie zu dem Ordner, in dem Sie das Projekt erstellen möchten. Erstellen Sie einen Ordner mit dem Projektnamen.

c:\projects>mkdir jakartaeesample2

c:\projects>dir
Die Datenträgerbezeichnung für Laufwerk C lautet Windows
Die Seriennummer des Volumes lautet F06A-A652

 c:\Projektverzeichnis

2020/03/29  12:11    <DIR>          .
2020/03/29  12:11    <DIR>          ..
2020/03/29  12:11    <DIR>          jakartaeesample2
0 Dateien 0 Bytes
3 Verzeichnisse 134,858,534,912 Bytes freier Speicherplatz

c:\projects>

Gehen Sie zu dem Ordner, den Sie erstellt haben, und führen Sie `` `gradle init --type java-library``` aus. Geben Sie 1 für die DSL-Auswahl des Build-Skripts und 1 für die Auswahl des Test-Frameworks ein. Der Projektname und das Quellpaket bleiben standardmäßig erhalten. Lassen Sie sie also leer und geben Sie die Eingabetaste ein.

c:\projects>cd jakartaeesample2

c:\projects\jakartaeesample2>gradle init --type java-library
Starting a Gradle Daemon (subsequent builds will be faster)

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1

Project name (default: jakartaeesample2):
Source package (default: jakartaeesample2):

> Task :init
Get more help with your project: https://docs.gradle.org/6.2.2/userguide/java_library_plugin.html

BUILD SUCCESSFUL in 3m 57s
2 actionable tasks: 2 executed
c:\projects\jakartaeesample2>

Die Projekterstellung ist abgeschlossen, wenn BUILD SUCCESSFUL angezeigt wird. Importieren Sie das erstellte Projekt aus Eclipse. Starten Sie Eclipse und klicken Sie auf Datei> Importieren. image.png

Gradle> Wählen Sie ein vorhandenes Gradle-Projekt aus und klicken Sie auf Weiter.

image.png

Wählen Sie den Ordner für das gerade erstellte Projekt im Projektstammverzeichnis aus und klicken Sie auf Weiter. image.png

Behalten Sie die Standardeinstellungen bei und klicken Sie auf Weiter. image.png

Nach einer Weile wird der folgende Bildschirm angezeigt: Klicken Sie auf Fertig stellen. image.png

Das Gradle-Projekt, das Sie in den Paket-Explorer importiert haben, wird angezeigt. image.png

Zugabe von gradle.properties

Fügen Sie nach dem Erstellen des Gradle-Projekts die Eigenschaftendatei gradle.properties zur Verwendung für build.gradle hinzu. Klicken Sie im Paket-Explorer mit der rechten Maustaste auf den Projektnamen und wählen Sie Neu> Datei.

Geben Sie gradle.properties als Dateinamen ein und klicken Sie auf Fertig stellen. image.png

Die Datei gradle.properties wird hinzugefügt und im Editor angezeigt. Geben Sie den folgenden Inhalt ein.

gradle.properties


#########################
 # gradle.properties for jakartaeesample2
 # author:         sunnycloudy764
 # since:          2020/03/27
 # Gradle version: 6.2.2
#########################

#########################
# base setting
#########################
groupName=jakartaeesample2
artifactid=jakartaeesample2
buildVersion=0.0.1
appName=jakartaeesample2
encoding=UTF-8
jdkVersion=11

#####################
# plugin version
#####################
spotbugsVersion = 4.0.5
flywayVersion = 6.3.2

#####################
# plugin tool version
#####################
checkstyleToolVersion = 8.31
spotbugsToolVersion = 4.0.1

#####################
# library version
#####################
JakartaEEAPIVersion = 8.0
PostgreSQLVersion=42.2.11

slf4jVersion = 1.7.30
logbackVersion = 1.2.3

commonsCollections4Version = 4.4
commonsLang3Version = 3.10
commonsIoVersion = 2.6

lombokVersion=1.18.12

junitVersion = 4.13
hamcrestVersion = 1.3
assertjVersion = 3.15.0
assertjdbVersion = 1.3.0
mockitoVersion = 3.3.3
jacocoCoreVersion=0.8.5

h2Version = 1.4.200
dbSetupVersion = 2.1.0

arquillianJunitContainerVersion=1.6.0.Final
arquillianJacocoVersion=1.1.0
arquillianPayaraEmbeddedVersion=2.2
payaraEmbeddedAllVersion=5.201

#####################
# flyway settings
#####################
flywayuser=postgresql
flywaypassword=xxxxxxx
flywaydriver = org.postgresql.Driver
flywayurl = jdbc:postgresql://localhost:5432/testdb
flywaytarget = 0.0.1
outOfOrder = false
validateOnMigrate = true

#####################
# project facet
#####################
javaFacet = 11
webFacet = 4.0
jsfFacet = 2.3
glassfishFacet = 5.0

#####################
# glassfish settings
#####################
glassfishHome = C:/payara/payara-5.201/payara5/glassfish
glassfishDomain = domain1
isRemote = false
remoteIP = 127.0.0.1

Ändern Sie build.gradle

Ändern Sie dann build.gradle, um die Jakarta EE-Anwendung zu entwickeln. Bitte ändern Sie wie folgt.

build.gradle


/*
 ******************************
 * build.gradle for jakartaeesample2
 * author:         sunnycloudy764
 * since:          2020/03/27
 * Gradle version: 6.2.2
 ******************************
 */
plugins {
  id "com.github.spotbugs" version "${spotbugsVersion}"
  id "org.flywaydb.flyway" version "${flywayVersion}"
}

apply plugin: 'project-report'
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse'
apply plugin: 'eclipse-wtp'
apply plugin: 'checkstyle'
apply plugin: 'jacoco'

sourceCompatibility = "${jdkVersion}"
targetCompatibility = "${jdkVersion}"

tasks.withType(AbstractCompile)*.options*.encoding = "${encoding}"
tasks.withType(GroovyCompile)*.groovyOptions*.encoding = "${encoding}"
[compileJava, compileTestJava, javadoc].each { it.options.encoding = "${encoding}" }

version = "${buildVersion}"
group = "${groupName}"

configurations {
	all*.exclude module: 'slf4j-jdk12'
	all*.exclude module: 'slf4j-jdk14'
    all*.exclude module: 'servlet-api'
    assertj
}

repositories {
   mavenCentral()
   maven { url 'http://repository.jboss.org/nexus/content/groups/public' }
}

dependencies {
	//Jakarta EE API
	compileOnly group: 'jakarta.platform', name: 'jakarta.jakartaee-api', version: "${JakartaEEAPIVersion}"
	testCompileOnly group: 'jakarta.platform', name: 'jakarta.jakartaee-api', version: "${JakartaEEAPIVersion}"

	//JDBC driver (PostgreSQL)
	implementation group: 'org.postgresql', name: 'postgresql', version: "${PostgreSQLVersion}"

	//SLF4j + logback
	implementation group:'org.slf4j', name: 'slf4j-api', version: "${slf4jVersion}"
	implementation group:'ch.qos.logback', name: 'logback-classic', version: "${logbackVersion}"
	implementation group:'ch.qos.logback', name: 'logback-core', version: "${logbackVersion}"

	//Apache Commons
	implementation group:'org.apache.commons', name: 'commons-collections4', version: "${commonsCollections4Version}"
	implementation group:'org.apache.commons',name:'commons-lang3',version:"${commonsLang3Version}"
	implementation group:'commons-io', name:'commons-io',version:"${commonsIoVersion}"

	//Lombok
	annotationProcessor group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}"
	compileOnly group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}"
	testAnnotationProcessor  group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}"
	testCompileOnly group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}"

	//Test libraries
	//JUnit
	testImplementation (group: 'junit', name: 'junit', version: "${junitVersion}"){
        exclude module: 'hamcrest-core'
	}
	testImplementation group:'org.hamcrest', name: 'hamcrest-all', version: "${hamcrestVersion}"
	testImplementation group: 'org.assertj', name: 'assertj-core', version: "${assertjVersion}"
	testImplementation group: 'org.assertj', name: 'assertj-db', version: "${assertjdbVersion}"

	//Mock libraries
	testImplementation group:'org.mockito', name:'mockito-inline', version: "${mockitoVersion}"

	//jacoco
	testImplementation group: 'org.jacoco', name: 'org.jacoco.core', version: "${jacocoCoreVersion}"

	//for DB Test
	testImplementation group: 'com.h2database', name: 'h2', version: "${h2Version}"
	testImplementation group: 'com.ninja-squad', name: 'DbSetup', version: "${dbSetupVersion}"

	//CDI Test(Arquillian)
	testImplementation group: 'org.jboss.arquillian.junit', name: 'arquillian-junit-container', version: "${arquillianJunitContainerVersion}"
	testImplementation group:'org.jboss.arquillian.extension', name: 'arquillian-jacoco', version: "${arquillianJacocoVersion}"
	testImplementation group:'fish.payara.arquillian', name: 'arquillian-payara-server-embedded', version: "${arquillianPayaraEmbeddedVersion}"
   	testImplementation group: 'fish.payara.extras', name: 'payara-embedded-all', version: "${payaraEmbeddedAllVersion}"

	//assertj assertion generator
	assertj 'org.assertj:assertj-assertions-generator:2.2.0'
    assertj project
}

// flyway settings
flyway {
    driver = "${flywaydriver}"
    url = "${flywayurl}"
    user = "${flywayuser}"
    password = "${flywaypassword}"
    target = "${flywaytarget}"
    outOfOrder = false
    validateOnMigrate = true
    cleanOnValidationError = false
}

//assertj assertion generator
def assertjOutput = file('src-gen/test/java')
task assertjClean(type: Delete) {
    delete assertjOutput
}

task assertjGen(dependsOn: assertjClean, type: JavaExec) {
    doFirst {
        if (!assertjOutput.exists()) {
            if (!assertjOutput.mkdirs()) {
                throw new InvalidUserDataException("Unable to create `$assertjOutput` directory")
            }
        }
    }
    main 'org.assertj.assertions.generator.cli.AssertionGeneratorLauncher'
    classpath = files(configurations.assertj)
    workingDir = assertjOutput
    args = [    ]
}
compileTestJava.dependsOn(assertjGen)

//Fügen Sie den Code für die Generierung des Assertj-Generators zu sourceSets hinzu
sourceSets {
    test {
        java {
            srcDir 'src/test/java'
            srcDir 'src-gen/test/java'
        }
    }
}

war {
	webAppDirName = "WebContent"
	baseName = "${artifactid}"
}

test {
    systemProperties 'property': 'value'
    ignoreFailures = true
    reports {
    	html.enabled = true
    	junitXml.enabled = true
	}
}

jacoco {
	toolVersion = "${jacocoCoreVersion}"
}
jacocoTestReport {
	reports {
		html.enabled = true
		xml.enabled = true
		csv.enabled = false
	}
}

checkstyle {
    toolVersion = "${checkstyleToolVersion}"
    ignoreFailures = true
    sourceSets = subprojects.sourceSets.main
	configFile file("$rootDir/config/checkstyle.xml")
}

spotbugs {
    toolVersion =  "${spotbugsToolVersion}"
    ignoreFailures = true
    effort = "max"
    reportLevel = 'low'
}

//Einstellungen für Eclipse IDE
eclipse {
  wtp {
	facet {
        facet name: 'jst.java', version: "${javaFacet}"
        facet name: 'jst.web', version: "${webFacet}"
        facet name: 'jst.jsf', version: "${jsfFacet}"
        facet name: 'glassfish.web', version: "${glassfishFacet}"
    }
    component {
      contextPath = 'WebContent'
    }
  }
}

//Überprüfen Sie das Betriebssystem.
def isWindows() {
    return System.properties['os.name'].toLowerCase().contains('windows')
}

//Payara Server Einstellungen
ext {
	asadmin = "${glassfishHome}" + (isWindows() ? '/bin/asadmin.bat' : '/bin/asadmin')
	domain = "${glassfishDomain}"
}

//Starten Sie Payara Server.
task startServer(type: Exec) {
	description 'Starten Sie den Anwendungsserver.'
    commandLine asadmin, 'start-domain', '--debug=true', domain
}

//Beenden Sie Payara Server.
task stopServer(type: Exec) {
	description 'Stoppen Sie den Anwendungsserver.'
    commandLine asadmin, 'stop-domain', domain
}

//Stellen Sie die WAR-Datei auf Payara Server bereit.
task deploy(type: Exec, dependsOn: ':war') {
	appName = "${appName}"
	description 'Stellen Sie die WAR-Datei bereit.'
	if("${isRemote}" == 'true'){
		commandLine asadmin, '--host', "${remoteIP}", '--user', 'admin', '--passwordfile', '..\\glassfishpassword.txt', '--port', '4848' , 'deploy', '--force=true', '--contextroot', appName, '--name', appName, war.archivePath
	}else{
	    commandLine asadmin, 'deploy', '--force=true', "--contextroot", appName, "--name", appName, war.archivePath
    }
}

Um Jakarta EE zu entwickeln, ist es in Ordnung, die Jakarta EE-API zur Abhängigkeit hinzuzufügen. Hier haben wir jedoch verschiedene Bibliotheken für die normale Entwicklung hinzugefügt.

Zusätzlich wird das flywayDB-Plugin für die DB-Erstellung hinzugefügt, und Checkstyle und Spotbugs werden als statische Analyse hinzugefügt. Und ich erstelle eine Bereitstellungsaufgabe, damit sie mit der Gradle-Aufgabe bereitgestellt werden kann.

Erstellung einer Checkstyle-Definitionsdatei

Da checkstyle als eines der statischen Analysewerkzeuge in diesem Projekt verwendet wird, muss die checkstyle-Definitionsdatei im Projekt platziert werden. Erstellen Sie zunächst den Konfigurationsordner, in dem die Definitionsdatei abgelegt wird. Klicken Sie im Paket-Explorer mit der rechten Maustaste auf den Projektnamen und wählen Sie Neu> Ordner. Geben Sie config als Ordnernamen ein und klicken Sie auf Fertig stellen.

image.png

Klicken Sie nach dem Erstellen des Konfigurationsordners mit der rechten Maustaste auf den Konfigurationsordner und wählen Sie Neu> Datei. Geben Sie checkstyle.xml als Dateinamen ein und klicken Sie auf Fertig stellen. Informationen zu checkstyle.xml finden Sie unter Official google_check.xml.

Erstellen Sie checkstyle.xml. Wenn bei Eclipse kein Fehler auftritt, ist die Projekterstellung abgeschlossen.

Recommended Posts

[Jakarta EE 8 Anwendungsentwicklung mit Gradle] 2. Projekterstellung
[Jakarta EE 8 Anwendungsentwicklung mit Gradle] 1. Umgebungskonstruktion
Erstellen Sie mit Gradle ein Java-Multiprojekt
One-JAR Java EE-Anwendung mit WebSphere Liberty
Spring Boot2-Webanwendungsentwicklung mit Visual Studio Code Hello World-Erstellung
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Entwicklung von Spring5 MVC-Webanwendungen mit Visual Studio Code Maven-Vorlagenerstellung
Spring 5 MVC-Webanwendungsentwicklung mit Visual Studio Code Spring Security-Verwendung 2/3 [Seitenerstellung 1/2]
Java-Entwicklungsgrundlagen ~ Einstellungen für die Entwicklungsumgebung und Projekterstellung ~
Erstellen Sie mit Gradle Spring Boot-Projekte nach Umgebung
Fügen Sie mit Gradle ein Projekt in einen beliebigen Ordner ein
Erstellung persönlicher Anwendungen # 3
Erstellung persönlicher Anwendungen # 1
JavaFX-Anwendungsentwicklung mit IntelliJ IDEA und Gradle ~ Von der Umgebungskonstruktion bis zum Beispielcode ~
Erfahrene Java-Benutzer beginnen mit der Entwicklung von Android-Apps
Etwa der Ablauf der Entwicklung von Webanwendungen mit Rails.