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.
La configuration et la librairie thirdPartyClasspath sont disponible dans le projet sous /src/checkstyle
.
- Accéder à la configuration du checkstyle
File > Settings … > Tools > Checkstyle
a. Ajouter le fichier build-tools-<version>.jar
depuis le repository maven (<sainet>/src/checkstyle/build-tools.jar
) dans les third-party checks
b. Ajouter le fichier checkstlye (<sainet>/src/checkstyle/checkstyle.xml
)
c. Vérifier que la version est >= 10.25.0
Il est aussi possible de modifier directement le paramétrage dans le fichier .idea/checkstyle-idea.xml
(cela permet de définir le chemin du build-tools
en utilisant $PROJECT_DIR$)
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CheckStyle-IDEA" serialisationVersion="2">
<checkstyleVersion>10.25.0</checkstyleVersion>
<scanScope>Everything</scanScope>
<copyLibs>true</copyLibs>
<option name="thirdPartyClasspath">
<option value="$PROJECT_DIR$/src/checkstyle/build-tools.jar" />
</option>
<option name="activeLocationIds">
<option value="sai-checks" />
</option>
<option name="locations">
<list>
<ConfigurationLocation id="bundled-sun-checks" type="BUNDLED" scope="All" description="Sun Checks">(bundled)</ConfigurationLocation>
<ConfigurationLocation id="bundled-google-checks" type="BUNDLED" scope="All" description="Google Checks">(bundled)</ConfigurationLocation>
<ConfigurationLocation id="sai-checks" type="PROJECT_RELATIVE" scope="All" description="sai-checks">$PROJECT_DIR$/src/checkstyle/checkstyle.xml</ConfigurationLocation>
</list>
</option>
</component>
</project>
Le lancement se fait en sélectionnant la règle, puis en la lançant soit sur la classe en cours, soit sur les classes marquées comme modifiées (mais non committées) dans Git.
Il est possible de lancer automatiquement checkstyle via le module d’inspection et de mettre la severité en error afin de générer une erreur dans intellij si une règle n’est pas respectée.
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