Cet article est une suite de [Jakarta EE 8 Application Development with Gradle] 1. Environment Construction. Dans l'article précédent, nous avons construit un environnement de développement. Dans cet article, nous allons créer un projet Gradle.
Lorsque vous utilisez le projet Gradle dans Eclipse, définissez les paramètres suivants pour utiliser le Gradle installé dans les paramètres d'environnement précédents. Démarrez Eclipse, ouvrez Fenêtre> Paramètres, sélectionnez Gradle et apportez les modifications suivantes:
article | Contenu |
---|---|
Répertoire d'installation local | Dossier d'installation Gradle |
Accueil Java | Jakarta EE 8 |
Après avoir apporté des modifications, cliquez sur Appliquer et fermer.
Il existe deux façons de créer un projet Gradle, l'une consiste à utiliser Eclipse et l'autre à le créer sur la ligne de commande. Je vais vous présenter chacun d'eux.
Dans Eclipse, cliquez sur Fichier> Nouveau> Projet Gralde.
Entrez le nom du projet et cliquez sur Suivant.
Laissez les paramètres tels quels et cliquez sur Suivant.
Après un certain temps, l'écran suivant s'affiche: Cliquez sur Terminer.
Le projet Gradle est créé et affiché dans l'Explorateur de packages.
Ouvrez la ligne de commande et accédez au dossier dans lequel vous souhaitez créer le projet. Créez un dossier avec le nom du projet.
c:\projects>mkdir jakartaeesample2
c:\projects>dir
Le nom de volume du lecteur C est Windows
Le numéro de série du volume est F06A-A652
c:\répertoire des projets
2020/03/29 12:11 <DIR> .
2020/03/29 12:11 <DIR> ..
2020/03/29 12:11 <DIR> jakartaeesample2
0 fichiers 0 octets
3 répertoires 134,858,534,912 octets d'espace libre
c:\projects>
Allez dans le dossier que vous avez créé et exécutez
gradle init --type java-library```.
Entrez 1 pour le choix DSL du script de construction et 1 pour le choix du cadre de test.
Le nom du projet et le package source resteront par défaut, laissez-les donc vides et entrez Entrée.
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>
La création du projet est terminée lorsque BUILD SUCCESSFUL s'affiche. Importez le projet créé depuis Eclipse. Démarrez Eclipse et cliquez sur Fichier> Importer.
Gradle> Sélectionnez un projet Gradle existant et cliquez sur Suivant.
Sélectionnez le dossier du projet que vous venez de créer dans le répertoire racine du projet et cliquez sur Suivant.
Conservez les paramètres par défaut et cliquez sur Suivant.
Après un certain temps, l'écran suivant s'affiche: Cliquez sur Terminer.
Le projet Gradle que vous avez importé dans l'Explorateur de packages s'affiche.
Après avoir créé le projet Gradle, ajoutez le fichier de propriétés gradle.properties à utiliser dans build.gradle. Cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de packages et sélectionnez Nouveau> Fichier.
Entrez gradle.properties comme nom de fichier et cliquez sur Terminer.
Le fichier gradle.properties sera ajouté et affiché dans l'éditeur. Entrez le contenu suivant.
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
Modifiez ensuite build.gradle pour développer l'application Jakarta EE. Veuillez modifier comme suit.
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)
//Ajouter le code pour la génération du générateur assertj aux sourcesSets
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'
}
//Paramètres de l'IDE Eclipse
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'
}
}
}
//Vérifiez le système d'exploitation.
def isWindows() {
return System.properties['os.name'].toLowerCase().contains('windows')
}
//Paramètres du serveur Payara
ext {
asadmin = "${glassfishHome}" + (isWindows() ? '/bin/asadmin.bat' : '/bin/asadmin')
domain = "${glassfishDomain}"
}
//Démarrez Payara Server.
task startServer(type: Exec) {
description 'Démarrez le serveur d'applications.'
commandLine asadmin, 'start-domain', '--debug=true', domain
}
//Arrêtez Payara Server.
task stopServer(type: Exec) {
description 'Arrêtez le serveur d'applications.'
commandLine asadmin, 'stop-domain', domain
}
//Déployez le fichier WAR sur le serveur Payara.
task deploy(type: Exec, dependsOn: ':war') {
appName = "${appName}"
description 'Déployez le fichier WAR.'
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
}
}
Afin de développer Jakarta EE, il est possible d'ajouter l'API Jakarta EE à la dépendance, mais ici, nous avons ajouté diverses bibliothèques pour un développement normal.
De plus, le plugin flywayDB est ajouté pour la création de bases de données, et le style de contrôle et les bogues sont ajoutés en tant qu'analyse statique. Et je crée une tâche de déploiement afin qu'elle puisse être déployée avec la tâche Gradle.
Puisque le style de contrôle est utilisé comme l'un des outils d'analyse statique de ce projet, il est nécessaire de placer le fichier de définition de style de contrôle dans le projet. Tout d'abord, créez le dossier de configuration dans lequel le fichier de définition sera placé. Cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de packages et sélectionnez Nouveau> Dossier. Tapez config pour le nom du dossier et cliquez sur Terminer.
Une fois le dossier de configuration créé, cliquez avec le bouton droit sur le dossier de configuration et sélectionnez Nouveau> Fichier. Entrez checkstyle.xml comme nom de fichier et cliquez sur Terminer. Pour checkstyle.xml, vous devez vous référer à Official google_check.xml.
Créez checkstyle.xml, et si aucune erreur ne se produit sur Eclipse, la création du projet est terminée.
Recommended Posts