[JAVA] Notes sur l'utilisation du plug-in de gestion des dépendances

Qu'est-ce que le plugin de gestion des dépendances?

Un plug-in Gradle développé par le Spring Project. Cela permet à Gradle d'utiliser le même mécanisme que la nomenclature de Maven.

L'explication de BOM est [Si vous voulez utiliser BOM avec Gradle, il semble préférable d'utiliser le plugin de gestion des dépendances fourni par l'équipe Spring-Make something](http://create-something.hatenadiary.jp/entry/2015/05/5 08/063000) etc.

Faisant à l'origine partie du plug-in Spring Boot autour de Spring Boot 1.x, il a été créé en tant que plug-in séparé lorsque Spring Boot est devenu 2.x. + Il peut donc être utilisé indépendamment de Spring Boot (mais je pense que c'est en fait le plus utile lors de l'utilisation de Spring Boot).

environnement

Gradle

5.4.1

Dependency Management Plugin

1.0.8.RELEASE

Hello World

build.gradle


plugins {
    id "java"
    id "io.spring.dependency-management" version "1.0.8.RELEASE"
}

repositories {
    mavenCentral()
}

dependencyManagement {
    dependencies {
        dependency "org.apache.commons:commons-lang3:3.9"
    }
}

dependencies {
    implementation "org.apache.commons:commons-lang3"
}

sourceCompatibility = 11
targetCompatibility = 11

compileJava.options.encoding = "UTF-8"

--plugins Voir https://plugins.gradle.org/plugin/io.spring.dependency-management pour savoir comment écrire sans utiliser DSL.

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
\--- org.apache.commons:commons-lang3 -> 3.9

La description

build.gradle


dependencyManagement {
    dependencies {
        dependency "org.apache.commons:commons-lang3:3.9"
    }
}

--Déclarer les bibliothèques dépendantes jusqu'à la version avec les dépendances de dependencyManagement

build.gradle


dependencies {
    implementation "org.apache.commons:commons-lang3"
}

Déclarer des versions de plusieurs artefacts dans le même groupe à la fois

build.gradle


...

dependencyManagement {
    dependencies {
        dependencySet(group: "org.apache.poi", version: "4.1.0") {
            entry "poi"
            entry "poi-ooxml"
        }
    }
}

dependencies {
    implementation "org.apache.poi:poi"
    implementation "org.apache.poi:poi-ooxml"
}

...

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.apache.poi:poi -> 4.1.0
|    +--- commons-codec:commons-codec:1.12
|    +--- org.apache.commons:commons-collections4:4.3
|    \--- org.apache.commons:commons-math3:3.6.1
\--- org.apache.poi:poi-ooxml -> 4.1.0
     +--- org.apache.poi:poi:4.1.0 (*)
     +--- org.apache.poi:poi-ooxml-schemas:4.1.0
     |    \--- org.apache.xmlbeans:xmlbeans:3.1.0
     +--- org.apache.commons:commons-compress:1.18
     \--- com.github.virtuald:curvesapi:1.06

La description

build.gradle


dependencyManagement {
    dependencies {
        dependencySet(group: "org.apache.poi", version: "4.1.0") {
            entry "poi"
            entry "poi-ooxml"
        }
    }
}

--dependencySet vous permet de spécifier des versions de plusieurs artefacts dans le même groupe à la fois

Exclure certaines bibliothèques des dépendances de transition

build.gradle


...

dependencyManagement {
    dependencies {
        dependency("org.apache.poi:poi:4.1.0") {
            exclude "commons-codec:commons-codec"
        }
    }
}

dependencies {
    implementation "org.apache.poi:poi"
}

...

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
\--- org.apache.poi:poi -> 4.1.0
     +--- org.apache.commons:commons-collections4:4.3
     \--- org.apache.commons:commons-math3:3.6.1

La description

build.gradle


dependencyManagement {
    dependencies {
        dependency("org.apache.poi:poi:4.1.0") {
            exclude "commons-codec:commons-codec"
        }
    }
}

Lors de la spécification avec dependencySet

build.gradle


...

dependencyManagement {
    dependencies {
        dependencySet(group: "org.apache.poi", version: "4.1.0") {
            entry("poi") {
                exclude "commons-codec:commons-codec"
            }
            entry "poi-ooxml"
        }
    }
}

dependencies {
    implementation "org.apache.poi:poi"
    implementation "org.apache.poi:poi-ooxml"
}

...

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.apache.poi:poi -> 4.1.0
|    +--- org.apache.commons:commons-collections4:4.3
|    \--- org.apache.commons:commons-math3:3.6.1
\--- org.apache.poi:poi-ooxml -> 4.1.0
     +--- org.apache.poi:poi:4.1.0 (*)
     +--- org.apache.poi:poi-ooxml-schemas:4.1.0
     |    \--- org.apache.xmlbeans:xmlbeans:3.1.0
     +--- org.apache.commons:commons-compress:1.18
     \--- com.github.virtuald:curvesapi:1.06

Lire la nomenclature

build.gradle


...

dependencyManagement {
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }
    }
}

dependencies {
    implementation "org.apache.commons:commons-lang3"
}

...

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
\--- org.apache.commons:commons-lang3 -> 3.8.1

La description

build.gradle


dependencyManagement {
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }
    }
}

Écraser la version déclarée dans la nomenclature

Écraser les propriétés de la version

build.gradle


...
dependencyManagement {
    dependencies {
        imports {
            mavenBom("org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE") {
                bomProperty "commons-lang3.version", "3.9"
            }
        }
    }
}

dependencies {
    implementation "org.apache.commons:commons-lang3"
}
...

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
\--- org.apache.commons:commons-lang3 -> 3.9

La description

build.gradle


            mavenBom("org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE") {
                bomProperty "commons-lang3.version", "3.9"
            }

Il existe également un moyen d'écrire en utilisant bomProperties (Map).

bomProperties(Map)Exemple spécifié par


dependencyManagement {
    dependencies {
        imports {
            mavenBom("org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE") {
                bomProperties([
                    "commons-lang3.version": "3.9",
                    "commons-pool2.version": "2.6.1"
                ])
            }
        }
    }
}

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.apache.commons:commons-lang3 -> 3.9
\--- org.apache.commons:commons-pool2 -> 2.6.1

Vous pouvez également le déclarer avec une propriété étendue.

Exemple spécifié dans les propriétés étendues


ext["commons-lang3.version"] = "3.8"
ext["commons-pool2.version"] = "2.6.0"

dependencyManagement {
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }
    }
}

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.apache.commons:commons-lang3 -> 3.8
\--- org.apache.commons:commons-pool2 -> 2.6.0

Écraser la gestion des dépendances

build.gradle


dependencyManagement {
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }
        dependency "org.apache.commons:commons-lang3:3.9"
    }
}

dependencies {
    implementation "org.apache.commons:commons-lang3"
}

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
\--- org.apache.commons:commons-lang3 -> 3.9

La description

build.gradle


dependencyManagement {
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }
        dependency "org.apache.commons:commons-lang3:3.9"
    }
}

Il peut également être remplacé en spécifiant la version normalement lors de la déclaration d'une dépendance.

Comment spécifier la version dans la déclaration de dépendance


dependencyManagement {
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }

        dependency "org.apache.commons:commons-lang3:3.9"
        dependency "org.apache.commons:commons-pool2:2.6.1"
    }
}

dependencies {
    implementation "org.apache.commons:commons-lang3"       //Si vous ne spécifiez pas la version
    implementation "org.apache.commons:commons-pool2:2.6.0" //Lorsque la version est spécifiée
}

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.apache.commons:commons-lang3 -> 3.9
\--- org.apache.commons:commons-pool2:2.6.0

--Si vous spécifiez une version directement avec ʻimplementation, cette version est adoptée (la priorité est donnée à la dépendance`).

Si vous voulez ignorer la version spécifiée directement dans la déclaration de dépendance, définissez l'option ʻoverriddenByDependencies sur false`.

Ignorer si la version directe est spécifiée


dependencyManagement {
    overriddenByDependencies = false
    
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }

        dependency "org.apache.commons:commons-lang3:3.9"
        dependency "org.apache.commons:commons-pool2:2.6.1"
    }
}

dependencies {
    implementation "org.apache.commons:commons-lang3"
    implementation "org.apache.commons:commons-pool2:2.6.0"
}

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.apache.commons:commons-lang3 -> 3.9
\--- org.apache.commons:commons-pool2:2.6.0 -> 2.6.1

Se référer aux propriétés de la nomenclature chargée

build.gradle


dependencyManagement {
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }
    }
}

task showBomProperty {
    doFirst {
        println "commons-lang3.version = ${dependencyManagement.importedProperties["commons-lang3.version"]}"
    }
}

Résultat d'exécution


> gradle showBomProperty
...
commons-lang3.version = 3.8.1

La description

build.gradle


task showBomProperty {
    doFirst {
        println "commons-lang3.version = ${dependencyManagement.importedProperties['commons-lang3.version']}"
    }
}

--Les propriétés de la nomenclature chargée peuvent être obtenues à partir de dependencyManagement.importedProperties.

Exclusions Tout d'abord, essayez de déclarer une dépendance sur commons-dbcp2 sans charger la nomenclature Spring Boot.

build.gradle


plugins {
    id "java"
}

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.apache.commons:commons-dbcp2:2.5.0"
}
...

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
\--- org.apache.commons:commons-dbcp2:2.5.0
     +--- org.apache.commons:commons-pool2:2.6.0
     \--- commons-logging:commons-logging:1.2

On peut voir qu'il contient une dépendance sur la journalisation des communs.

Ensuite, chargez la nomenclature Spring Boot et essayez-la.

build.gradle


dependencyManagement {
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }
    }
}

dependencies {
    implementation "org.apache.commons:commons-dbcp2"
}

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
\--- org.apache.commons:commons-dbcp2 -> 2.5.0
     \--- org.apache.commons:commons-pool2:2.6.0 -> 2.6.2

On peut voir que la dépendance vis-à-vis de la journalisation commune a disparu.

Il s'agit de la nomenclature Spring Boot, [dépendance à la journalisation des communs spécifiée par exclusion](https://github.com/spring-projects/spring-boot/blob/v2.1.6.RELEASE/spring Cela se produit à cause de -boot-project / spring-boot-dependencies / pom.xml # L1481).

Si vous voulez arrêter ce comportement (même s'il est spécifié comme ʻexclusion dans la nomenclature, vous voulez qu'il soit inclus comme dépendance), définissez ʻapplyMavenExclusions sur false.

build.gradle


dependencyManagement {
    applyMavenExclusions = false
    
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }
    }
}

dependencies {
    implementation "org.apache.commons:commons-dbcp2"
}

Résultat d'exécution


> gradle dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
\--- org.apache.commons:commons-dbcp2 -> 2.5.0
     +--- org.apache.commons:commons-pool2:2.6.0 -> 2.6.2
     \--- commons-logging:commons-logging:1.2

La dépendance vis-à-vis de la journalisation commune a été restaurée.

Définir pour chaque configuration

build.gradle


configurations {
    hoge
    fuga
    piyo
}

dependencyManagement {
    dependencies {
        dependency "org.apache.commons:commons-lang3:3.9"
    }

    hoge {
        dependencies {
            dependency "org.apache.commons:commons-lang3:3.8"
        }
    }

    fuga {
        dependencies {
            dependency "org.apache.commons:commons-lang3:3.8.1"
        }
    }
}

dependencies {
    hoge "org.apache.commons:commons-lang3"
    fuga "org.apache.commons:commons-lang3"
    piyo "org.apache.commons:commons-lang3"
}

Résultat d'exécution


> gradle dependencies --configuration hoge
...
hoge
\--- org.apache.commons:commons-lang3 -> 3.8

> gradle dependencies --configuration fuga
...
fuga
\--- org.apache.commons:commons-lang3 -> 3.8.1

> gradle dependencies --configuration piyo
...
piyo
\--- org.apache.commons:commons-lang3 -> 3.9

La description

build.gradle


dependencyManagement {
    dependencies {
        dependencies {
            dependency "org.apache.commons:commons-lang3:3.9"
        }
    }

    hoge {
        dependencies {
            dependency "org.apache.commons:commons-lang3:3.8"
        }
    }

    fuga {
        dependencies {
            dependency "org.apache.commons:commons-lang3:3.8.1"
        }
    }
}

Reportez-vous à la version de dépendance

build.gradle


dependencyManagement {
    dependencies {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
        }
        dependency "org.apache.commons:commons-pool2:2.6.0"
    }

    testImplementation {
        dependencies {
            dependency "org.apache.commons:commons-lang3:3.9"
            dependency "org.apache.commons:commons-pool2:2.6.1"
        }
    }
}

task showManagedVersions {
    doFirst {
        println """\
        |[default]
        |  commons-lang3 = ${dependencyManagement.managedVersions['org.apache.commons:commons-lang3']}
        |  commons-pool2 = ${dependencyManagement.managedVersions['org.apache.commons:commons-pool2']}
        |
        |[testImplementation]
        |  commons-lang3 = ${dependencyManagement.testImplementation.managedVersions['org.apache.commons:commons-lang3']}
        |  commons-pool2 = ${dependencyManagement.testImplementation.managedVersions['org.apache.commons:commons-pool2']}
        |""".stripMargin()
    }
}

Résultat d'exécution


> gradle showManagedVersions
...
[default]
  commons-lang3 = 3.8.1
  commons-pool2 = 2.6.0

[testImplementation]
  commons-lang3 = 3.9
  commons-pool2 = 2.6.1

La description

build.gradle


    doFirst {
        println """\
        |[default]
        |  commons-lang3 = ${dependencyManagement.managedVersions['org.apache.commons:commons-lang3']}
        |  commons-pool2 = ${dependencyManagement.managedVersions['org.apache.commons:commons-pool2']}
        |
        |[testImplementation]
        |  commons-lang3 = ${dependencyManagement.testImplementation.managedVersions['org.apache.commons:commons-lang3']}
        |  commons-pool2 = ${dependencyManagement.testImplementation.managedVersions['org.apache.commons:commons-pool2']}
        |""".stripMargin()
    }

--De dependencyManagement.managedVersions, vous pouvez voir la version de la dépendance qui a finalement été résolue.

Éléments à prendre en compte lors de l'utilisation dans un multi-projet

Il existe plusieurs façons d'écraser la version déclarée dans la nomenclature, mais la méthode de dépendance directe peut être ** non utilisée dans les multi-projets **.

Exemples de problèmes

Supposons que vous ayez une application Spring Boot avec la configuration suivante.

Structure du projet


|-build.gradle
|-settings.gradle
|
|-common/
| |-src/main/java/
| | `-sample/common/
| |   `-CommonComponent.java
| `-build.gradle
|
`-boot/
  |-src/main/java/
  | `-sample/
  |   `-SampleBootApplication.java
  `-build.gradle

--common est une image référencée par plusieurs projets (ici, pour simplifier, elle n'est référencée que par le projet boot) --boot est un projet Spring Boot

CommonComponent.java


package sample.common;

import org.springframework.stereotype.Component;
import org.apache.commons.lang3.ObjectUtils;

@Component
public class CommonComponent {

    public void method(Object obj) {
        System.out.println(ObjectUtils.isEmpty(obj));
    }
}

SampleBootApplication.java


package sample;

import sample.common.CommonComponent;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class SampleBootApplication {

    public static void main(String[] args) {
        try (ConfigurableApplicationContext context = SpringApplication.run(SampleBootApplication.class, args)) {
            CommonComponent common = context.getBean(CommonComponent.class);
            common.method("Hello World");
        }
    }
}

--C'est la classe qui démarre Spring Boot

Supposons que vous écriviez chaque build.gradle de ce multi-projet comme suit:

/build.gradle


plugins {
    id "org.springframework.boot" version "2.1.6.RELEASE" apply false
    id "io.spring.dependency-management" version "1.0.8.RELEASE" apply false
}

subprojects {
    apply plugin: "java"
    apply plugin: "io.spring.dependency-management"

    repositories {
        mavenCentral()
    }

    dependencyManagement {
        dependencies {
            imports {
                mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
            }
        }
    }

    sourceCompatibility = 11
    targetCompatibility = 11

    compileJava.options.encoding = "UTF-8"
}

/common/build.gradle


dependencies {
    implementation "org.springframework:spring-context"
    implementation "org.apache.commons:commons-lang3:3.9"
}

--Déclarer une dépendance sur spring-context car il utilise @ Component

/boot/build.gradle


apply plugin: "org.springframework.boot"

dependencies {
    implementation project(":common")
    implementation "org.springframework.boot:spring-boot-starter"
}

Lorsque vous démarrez l'application avec ce paramètre, ce sera comme suit.

Résultat d'exécution


> gradle bootRun
...

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.6.RELEASE)

...
2019-07-06 20:06:16.365  INFO 16428 --- [           main] sample.SampleBootApplication             : Started SampleBootApplication in 0.846 seconds (JVM running for 1.335)
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.lang3.ObjectUtils.isEmpty(Ljava/lang/Object;)Z
        at sample.common.CommonComponent.method(CommonComponent.java:10)
        at sample.SampleBootApplication.main(SampleBootApplication.java:14)

> Task :boot:bootRun FAILED

FAILURE: Build failed with an exception.

Qu'est-il arrivé?

Vous pouvez voir ce qui s'est passé en affichant les dépendances de chaque projet.

#dépendances de projet courantes
> gradle :common:dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.springframework:spring-context -> 5.1.8.RELEASE
|    ...
\--- org.apache.commons:commons-lang3:3.9

#dépendances du projet de démarrage
> gradle :boot:dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- project :common
|    +--- org.springframework:spring-context -> 5.1.8.RELEASE
|    |    ...
|    \--- org.apache.commons:commons-lang3:3.9 -> 3.8.1
\--- org.springframework.boot:spring-boot-starter -> 2.1.6.RELEASE
     ...

--Si vous regardez de près, le commons-lang3 du projet common est 3.9, mais vu depuis le projet boot, il est 3.8.1.

Pourquoi les versions sont-elles différentes?

/common/build.gradle


dependencies {
    implementation "org.springframework:spring-context"
    implementation "org.apache.commons:commons-lang3:3.9"
}

/boot/build.gradle


apply plugin: "org.springframework.boot"

dependencies {
    implementation project(":common")
    implementation "org.springframework.boot:spring-boot-starter"
}

Comment réparer

/build.gradle


plugins {
    id "org.springframework.boot" version "2.1.6.RELEASE" apply false
    id "io.spring.dependency-management" version "1.0.8.RELEASE" apply false
}

subprojects {
    apply plugin: "java"
    apply plugin: "io.spring.dependency-management"

    repositories {
        mavenCentral()
    }

    dependencyManagement {
        dependencies {
            imports {
                mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE"
            }

            dependency "org.apache.commons:commons-lang3:3.9"
        }
    }

    ...
}

--Changé pour spécifier la version de commons-lang3 dans dependencyManagement

/common/build.gradle


dependencies {
    implementation "org.springframework:spring-context"
    implementation "org.apache.commons:commons-lang3"
}

--Changé build.gradle de common pour arrêter de spécifier la version.

Vérification des dépendances


#dépendances courantes
> gradle :common:dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.springframework:spring-context -> 5.1.8.RELEASE
|    ...
\--- org.apache.commons:commons-lang3 -> 3.9

#dépendance de démarrage
> gradle :boot:dependencies --configuration runtimeClasspath
...
runtimeClasspath - Runtime classpath of source set 'main'.
+--- project :common
|    ...
|    \--- org.apache.commons:commons-lang3 -> 3.9
\--- org.springframework.boot:spring-boot-starter -> 2.1.6.RELEASE
     ...

--Il est devenu "3.9" vu depuis "boot"

Résultat d'exécution


> gradle bootRun
...
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.6.RELEASE)

...

false

Bien sûr, même si vous l'exécutez, aucune erreur ne se produira.

référence

Recommended Posts

Notes sur l'utilisation du plug-in de gestion des dépendances
Gestion des sessions de mémo d'utilisation de Spring Security
Notes d'utilisation de JavaParser
Notes d'utilisation de WatchService
Mémo d'utilisation PlantUML
Notes d'utilisation de JUnit5
Notes d'utilisation de Spring Shell
Mémo d'utilisation de Spring Security CSRF
Mémo d'utilisation de Spring Security Run-As
Spring Security Usage Memo Method Security
Installation du plug-in Eclipse de mémo personnel
Gestion des dépendances dans une architecture en couches
Mémo d'introduction à Eclipse 4.8 (édition du plugin)
Mémo d'utilisation de Spring Security CORS
Test de mémo d'utilisation de Spring Security
Authentification / autorisation de mémo d'utilisation de Spring Security
Mémo d'utilisation de JCA (Java Encryption Architecture)
En-tête de réponse de mémo d'utilisation de Spring Security
Mémo d'utilisation de Spring Security Basic / mécanisme