IntelliJ
Cette section explique comment configurer les différentes propriétés de l’éditeur IntelliJ pour un developpement SAINet harmonisé et efficace.
Configuration Coding Style
L’objectif est de s’assurer que les imports soient conformes aux règles du checkstyle SAINet.
- Sélectionnez File | Manage IDE Settings | Import Settings …
- Sélectionnez l’archive ZIP settings.zip qui ce trouve dans le projet sainet (sous src/checkstyle/intellij/settings.zip)
- Sélectionnez les paramètres à appliquer et cliquez sur OK.
Lancer les tests à partir de l'IDE
L’objectif ici est de pouvoir directement lancer les tests d’intégration depuis l’éditeur sans passer par des lignes de commande et des modifications de code
Pour cela, il faut passer les paramètres suivants lors du lancement des tests via JUnit :
- sainet.run-tests.path : doit correspondre au répertoire des données de test (pour CompareUtils). Dans IntelliJ, il suffit d’utiliser la variable
$ModuleFileDir$
(chemin vers le répertoire du module de test où se trouve la classe). - sainet.test_server.dir : doit correspondre au paramètre
--runtime
lors du lancement du serveur (répertoire où est initialisé le runtime du serveur). Si le serveur est lancé dans le répertoire du projet comme décrit dans les recommandations, il suffit d’utiliser$ProjectFileDir$
(chemin absolu vers le répertoire du projet actuel) suivi du répertoire choisi pour le runtime, par exemple$ProjectFileDir$/.sai_runtime
. Sinon, spécifiez directement le chemin complet vers le répertoire runtime.
Dans le cadre de certains lancements de test, il peut arriver que l’initialisation des classes ne fonctionne pas. Il est alors nécessaire de rajouter un paramètre dans le lancement lors de l’obtention des stacks de la forme suivante.
java.lang.ExceptionInInitializerError
at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @18e8568
java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
Pour corriger cela, ajouter l’option --add-opens java.base/java.lang=ALL-UNNAMED
dans les paramètres de lancement du test.
- Accéder aux options de lancement
Run > Edit Configurations... > Templates > JUnit > Edit configuration templates
- Ajouter les parmètres -Dsainet.run-tests.path et -Dsainet.test_server.dir.
- (Optionnel) il est aussi possible d’ajouter cette option pour régénérer les outputs (et donc accepter tous les changements)
-Dsainet.test.output.generation=true
Exemple de paramètre de lancement complet :
-ea -Dsainet.run-tests.path=$ModuleFileDir$ -Dsainet.test_server.dir=$ProjectFileDir$/.sai_runtime -Dsainet.test.output.generation=true --add-opens java.base/java.lang=ALL-UNNAMED
Désormais, il est possible d’executer un test sur le serveur mentionné sans avoir recours au Quick-Run
. A droite du test à lancer faire Run
(ou debug
).
Définir le Checkstyle
L’objectif ici est de pouvoir directement contrôler le style de la saisie sans devoir attendre les pipelines de test
- Accéder à la gestion des plugins
File > Settings … > Plugins
- Rechercher Checkstyle dans Marketplace et installer.
Désormais, il est possible de gérer le checkstyle par un nouvel onglet disponible en bas de l’écran.
La configuration est disponible directement dans les paramètres de l’application
- Accéder à la configuration du checkstyle
File > Settings … > Tools > Checkstyle
a. Ajouter le fichier build-tools-<version>.jar
depuis le repository maven (<home>/.m2/repository/ch/saierp/build-tools/<version>/build-tools-<version>.jar
) dans les third-party checks
b. Ajouter le fichier checkstlye (<sainet>/src/checkstyle/checkstyle.xml
)
- Le lancement du checkstyle depuis maven s’effectue depuis l’onglet maven
Afin de contrôler directement le paramétrage xml il est nécessaire de relier le checkstyle à l’outil de vérification du paramétrage dans le fichier checkstyle-idea.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CheckStyle-IDEA" serialisationVersion="2">
<checkstyleVersion>8.45.1</checkstyleVersion>
<scanScope>JavaOnly</scanScope>
<copyLibs>true</copyLibs>
<option name="thirdPartyClasspath">
<option value="C:\Users\<username>\.m2\repository\ch\saierp\build-tools\1.10\build-tools-1.10.jar" />
</option>
<option name="activeLocationIds" />
<option name="locations">
<list>
<ConfigurationLocation id="caac9be5-555c-4126-a6a5-b0b19c76297c" type="LOCAL_FILE" scope="All" description="sai-check">$PROJECT_DIR$/src/checkstyle/checkstyle.xml</ConfigurationLocation>
</list>
</option>
</component>
</project>
Bien penser à remplacer le chemin d’accès par son propre dossier .m2!
Pousser des fichiers à chaud
L’objectif ici est de pouvoir directement envoyer des fichiers java sur le serveur local sans passer par l’Adminclient
-
Prérequis : Maven doit être installé (et il faut connaitre le chemin vers la commande).
-
Configurer le nouvel outil externe introduit : Naviguer dans les paramètres de l’éditeur
File > Settings > Tools > External Tools > Add
- 1] Renseigner le chemin vers la command mvn
- 2] Mettre les arguments qui permet de lancer une commande dans la console d’administration.
-q exec:java -pl external/SNV4SRV-server -Dexec.args="--noconsole --admin-socket-port 9019 -c 'reload-dbcode $FilePath$'"
- 3] Dans working dir mettre
$ProjectFileDir$
pour utiliser le repertoire de base du projet.
- 3] Dans working dir mettre
le paramètre --admin-socket-port 9019 doit correspondre au port la console SAINet, par défaut 9019
- Rajouter un raccourci clavier et faire le lien avec le port pour l’envoi
Ignorer des fichier de maven lors du build
L’objectif ici est d’écarter des fichiers du build de maven pour éviter d’être pollué par leurs changements incessants.
- Naviguer dans les paramètres de maven
Settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Ignore Files
- Ajouter le fichier
flatten-pom.xml
par exemple
Définir le terminal par défaut
L’objectif ici est de définir le terminal par défaut qu’utilisera l’éditeur lors de l’ouverture de la console
- Naviguer dans les paramètres de l’éditeur
Setting > Tools > Terminal
- Choisir le
Shell path
pointant vers le terminal choisi (ex:git-bash.exe
)
Gestion des conflits avec maven
Des fois, maven pose des soucis dans sa gestion des index partagés entre plusieurs projets. Il est possible de désactiver ces index.
- Naviguer dans les paramètres de l’éditeur
Setting > Tools > Shared indexes
- Désactiver les pré-builds
Analyse automatique de la javadoc
L’éditeur est très sensible à la défition de la javadoc et émet des erreurs lorsqu’il trouve des incohérences. Il est possible de ne pas les considerer comme des erreurs.
- Naviguer dans les paramètres de l’éditeur
Setting > Editor > Inspections
Eviter le formattage lors du collage
L’éditeur essaye en continu d’optimiser le formattage. Il est possible de lui interdire le formattage lors du copier-coller de texte.
- Naviguer dans les paramètres de l’éditeur
Setting > Editor > General > Smart Keys
- Passer à
None
les comportements du collage