[JAVA] [Développement d'applications Jakarta EE 8 avec Gradle] 2. Création de projet

introduction

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.

Paramètres Eclipse 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

image.png

Après avoir apporté des modifications, cliquez sur Appliquer et fermer.

Créer un projet Gradle

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.

Créer un projet Gradle dans Eclipse

Dans Eclipse, cliquez sur Fichier> Nouveau> Projet Gralde. image.png

Entrez le nom du projet et cliquez sur Suivant. image.png

Laissez les paramètres tels quels et cliquez sur Suivant. image.png

Après un certain temps, l'écran suivant s'affiche: Cliquez sur Terminer. image.png

Le projet Gradle est créé et affiché dans l'Explorateur de packages. image.png

Créer un projet Gradle en ligne de commande

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. image.png

Gradle> Sélectionnez un projet Gradle existant et cliquez sur Suivant.

image.png

Sélectionnez le dossier du projet que vous venez de créer dans le répertoire racine du projet et cliquez sur Suivant. image.png

Conservez les paramètres par défaut et cliquez sur Suivant. image.png

Après un certain temps, l'écran suivant s'affiche: Cliquez sur Terminer. image.png

Le projet Gradle que vous avez importé dans l'Explorateur de packages s'affiche. image.png

Ajout de gradle.properties

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. image.png

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

Modifier build.gradle

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.

création de fichier de définition de checkstyle

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.

image.png

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

[Développement d'applications Jakarta EE 8 avec Gradle] 2. Création de projet
[Développement d'applications Jakarta EE 8 avec Gradle] 1. Construction de l'environnement
Créer un multi-projet Java avec Gradle
Application Java EE One-JAR avec WebSphere Liberty
Développement d'applications Web Spring Boot2 avec création de Visual Studio Code Hello World
Démarrez le développement d'applications Web avec Spring Boot
Développement d'applications Web Spring5 MVC avec création de modèles Visual Studio Code Maven
Développement d'applications Web Spring 5 MVC avec Visual Studio Code Utilisation de Spring Security 2/3 [Création de page 1/2]
Principes de base du développement Java ~ Paramètres d'environnement de développement et création de projet ~
Créez des projets Spring Boot par environnement avec Gradle
Ajouter un projet dans n'importe quel dossier avec Gradle
Création d'applications personnelles # 3
Création d'applications personnelles # 1
Développement d'applications JavaFX avec IntelliJ IDEA et Gradle ~ De la construction d'environnement à l'exemple de code ~
Les utilisateurs Java expérimentés se lancent dans le développement d'applications Android
À peu près le flux de développement d'applications Web avec Rails.