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.
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 |
Klicken Sie nach dem Vornehmen von Änderungen auf Übernehmen und schließen.
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.
Klicken Sie in Eclipse auf Datei> Neu> Gralde-Projekt.
Geben Sie den Projektnamen ein und klicken Sie auf Weiter.
Lassen Sie die Einstellungen unverändert und klicken Sie auf Weiter.
Nach einer Weile wird der folgende Bildschirm angezeigt: Klicken Sie auf Fertig stellen.
Das Gradle-Projekt wird erstellt und im Paket-Explorer angezeigt.
Ö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.
Gradle> Wählen Sie ein vorhandenes Gradle-Projekt aus und klicken Sie auf Weiter.
Wählen Sie den Ordner für das gerade erstellte Projekt im Projektstammverzeichnis aus und klicken Sie auf Weiter.
Behalten Sie die Standardeinstellungen bei und klicken Sie auf Weiter.
Nach einer Weile wird der folgende Bildschirm angezeigt: Klicken Sie auf Fertig stellen.
Das Gradle-Projekt, das Sie in den Paket-Explorer importiert haben, wird angezeigt.
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.
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 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.
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.
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