Je retranscris ici l'article de Julio Blason tant je l'ai trouvé bien et important !
Introduction
Comme vous le savez sûrement, il existe une légende sur internet congrue à l'arrivée de Maven 3 : il est possible d'écrire des pom en Yaml. Eh bien sachez que la chose n'est en rien une légende.
En effet, les versions Maven 3.x et supérieures recherchent - avant de lire le pom.xml - un fichier spécifique dans ./mvn/extensions.xml. Ce fichier va charger des extensions à Maven lui permettant de faire plus de choses.
L'idée est donc de demander à Maven de charger l'extension polyglot-yaml qui va ajouter à Maven la capacité d'interpréter du Yaml.
Mise en oeuvre
- À la racine de votre projet créez le répertoire ./mvn/
- Créez dans ce répertoire le fichier extensions.xml dont le contenu est le suivant :
<?xml version="1.0" encoding="UTF-8"?> <extensions> <extension> <groupId>io.takari.polyglot</groupId> <artifactId>polyglot-yaml</artifactId> <version>0.2.1</version> </extension> </extensions>
- Créez un fichier pom.yml à la racine de votre projet
- A titre d'exemple, voici un modèle de pom parent en Yaml :
modelEncoding: 'UTF-8'
modelVersion: '4.0.0'
groupId: 'com.enterprise.fivestars.fs'
artifactId: 'fs-project'
version: '1.0.0-SNAPSHOT'
packaging: 'pom'
name: '. ${project.artifactId} [${project.version}]'
properties:
## Project encoding
project.encoding: 'UTF-8'
project.build.sourceEncoding: '${project.encoding}'
project.reporting.outputEncoding: '${project.encoding}'
## Maven compiler
maven.compiler.source: '1.8'
maven.compiler.target: '${maven.compiler.source}'
## Kotlin compiler
kotlin.compiler.jvmTarget: '${maven.compiler.source}'
kotlin.source.directory: '${project.basedir}/src/main/kt'
kotlin.test.directory: '${project.basedir}/src/test/kt'
kotlin.version: '1.1.51'
## Loggers
logback.version: '1.1.7'
slf4j.version: '1.7.22'
modules:
- fs-domain
- fs-main
- fs-persistence
dependencyManagement:
dependencies:
## Project dependencies
- { groupId: '${project.groupId}' , artifactId: 'fs-project' , version: '${project.version}' }
- { groupId: '${project.groupId}' , artifactId: 'fs-domain' , version: '${project.version}' }
- { groupId: '${project.groupId}' , artifactId: 'fs-persistence' , version: '${project.version}' }
## Database - Driver & embedded DB
- { groupId: 'com.h2database' , artifactId: 'h2' , version: '1.4.195' }
## Database - Database migration
- { groupId: 'org.flywaydb' , artifactId: 'flyway-core' , version: '4.2.0' }
## Database - Connection Pool
- { groupId: 'com.zaxxer' , artifactId: 'HikariCP' , version: '2.7.2' }
## Database - Persistence framework
- { groupId: 'org.javalite' , artifactId: 'activejdbc' , version: '1.4.13.j7' }
## Dependencies Injection
- { groupId: 'org.codejargon.feather' , artifactId: 'feather' , version: '1.0' }
## Kotlin - JVM & Collection compliance
- { groupId: 'org.jetbrains.kotlin' , artifactId: 'kotlin-stdlib' , version: '${kotlin.version}' }
- { groupId: 'org.jetbrains.kotlin' , artifactId: 'kotlin-stdlib-jre8' , version: '${kotlin.version}' }
## Logger - Logging framework facad
- { groupId: 'org.slf4j' , artifactId: 'slf4j-api' , version: '${slf4j.version}' }
## Logger - Logging framework
- { groupId: 'ch.qos.logback' , artifactId: 'logback-classic' , version: '${logback.version}' }
## Testing dependencies
- { groupId: 'org.assertj' , artifactId: 'assertj-core' , version: '3.8.0' }
- { groupId: 'org.jetbrains.kotlin' , artifactId: 'kotlin-test' , version: '${kotlin.version}' }
- { groupId: 'org.junit.platform' , artifactId: 'junit-platform-runner' , version: '1.0.1' }
- { groupId: 'org.mockito' , artifactId: 'mockito-core' , version: '2.12.0' }
build:
pluginManagement:
plugins:
## Compiler - Java (Prevent its execution because of Kotlin)
- artifactId: 'maven-compiler-plugin'
groupId: 'org.apache.maven.plugins'
version: '3.6.2'
configuration:
compilerArgs: {arg: '-Werror'}
encoding: '${project.build.sourceEncoding}'
fork: true
debug: false
optimize: true
showDeprecation: true
showWarnings: true
source: '${maven.compiler.source}'
target: '${maven.compiler.target}'
executions:
- goals:
id: 'default-compile'
phase: 'none'
- goals:
id: 'default-testCompile'
phase: 'none'
- goals: ['compile']
id: 'java-compile'
phase: 'compile'
- goals: ['testCompile']
id: 'java-test-compile'
phase: 'compile'
## Compiler - Kotlin
- artifactId: 'kotlin-maven-plugin'
groupId: 'org.jetbrains.kotlin'
version: '${kotlin.version}'
configuration:
nowarn: false
jvmTarget: '${kotlin.compiler.jvmTarget}'
executions:
- goals: ['compile']
id: 'compile'
phase: 'compile'
configuration:
sourceDirs: [
'${kotlin.source.directory}'
]
- goals: ['test-compile']
id: 'test-compile'
phase: 'test-compile'
configuration:
sourceDirs: [
'${kotlin.test.directory}'
]
## ActiveJDBC - Enrich entities bytecode
- artifactId: 'activejdbc-instrumentation'
groupId: 'org.javalite'
version: '1.4.13.j7'
executions:
- goals: ['instrument']
id: 'enrich-entities'
phase: 'process-classes'
## Quality - JaCoCo (Code coverage)
- artifactId: 'jacoco-maven-plugin'
groupId: 'org.jacoco'
version: '0.7.9'
executions:
- goals:
id: 'prepare-agent'
inherited: true
- goals:
id: 'report'
inherited: true
phase: 'prepare-package'
Et la même chose avec un pom enfant :
modelEncoding: 'UTF-8'
modelVersion: '4.0.0'
parent:
groupId: 'com.enterprise.fivestars.fs'
artifactId: 'fs-project'
version: '1.0.0-SNAPSHOT'
relativePath: '../pom.yml'
artifactId: 'fs-persistence'
packaging: 'jar'
name: '${project.artifactId}'
dependencies:
## Kotlin - JVM & Collection compliance
- { groupId: 'org.jetbrains.kotlin' , artifactId: 'kotlin-stdlib' , scope: 'compile' }
- { groupId: 'org.jetbrains.kotlin' , artifactId: 'kotlin-stdlib-jre8' , scope: 'compile' }
## Database - Database migration
- { groupId: 'org.flywaydb' , artifactId: 'flyway-core' , scope: 'compile' }
## Database - Driver & embedded DB
- { groupId: 'com.h2database' , artifactId: 'h2' , scope: 'compile' }
## Database - Connection Pool
- { groupId: 'com.zaxxer' , artifactId: 'HikariCP' , scope: 'compile' }
## Logger - Logging framework facade
- { groupId: 'org.slf4j' , artifactId: 'slf4j-api' , scope: 'compile' }
## Logger - Logging framework
- { groupId: 'ch.qos.logback' , artifactId: 'logback-classic' , scope: 'compile' }
## Testing dependencies
- { groupId: 'org.assertj' , artifactId: 'assertj-core' , scope: 'test' }
- { groupId: 'org.jetbrains.kotlin' , artifactId: 'kotlin-test' , scope: 'test' }
- { groupId: 'org.junit.platform' , artifactId: 'junit-platform-runner' , scope: 'test' }
- { groupId: 'org.mockito' , artifactId: 'mockito-core' , scope: 'test' }
build:
plugins:
- { groupId: 'org.jetbrains.kotlin' , artifactId: 'kotlin-maven-plugin' }
- { groupId: 'org.apache.maven.plugins' , artifactId: 'maven-compiler-plugin' }
- { groupId: 'org.jacoco' , artifactId: 'jacoco-maven-plugin' }
Et en prime, vous savez à présent compiler du Kotlin avec Maven.
C'est parti pour un tuto de réinstallation de Linux Mint Debian Edition 2. Ce post est avant tout pour moi une sorte de gros mémo.
Installer ce qui manque
## htop - pour visualiser les processus
## gparted - pour repartitionner des disques
## tree - pour visualiser une arborescence de fichiers dans une console
## wine - pour faire les applications Windows
## filezilla - pour les accès FTP
## audacity - pour la retouche audio
sudo aptitude install htop gparted tree wine filezilla audacity
## Ajouter les tools de versionning :
sudo aptitude install mercurial git gitk git-flow git-doc git-sh git-man git-all
## Ajout de police de caractères (Microsoft pour la compatibilité avec la suite Office, Anonymous Pro pour coder et Bitstream par habitude) :
sudo aptitude install ttf-mscorefonts-installer ttf-anonymous-pro ttf-liberation ttf-bitstream-vera
Mettre à jour les kernels
## Ajouter le kernel i686 :
sudo aptitude install linux-image-686-pae linux-headers-686-pae
## Supprimer l'ancien kernel :
sudo aptitude remove linux-headers-586 linux-image-586 linux-headers-3.16.0-4-586 linux-image-3.16.0-4-586 linux-image-3.16.0-4-586
Suppression des softs inutiles
## Avahi - l'équivalent du service 'Bonjour' d'Apple mais sous Linux. Rien à péter de publier les services de ma machine sur un réseau local avec une sorte DNS/DHCP décentralisé (pas pour aller sur le net, décentralisé de votre réseau privé uniquement).
sudo aptitude remove avahi-autoipd avahi-daemon avahi-utils
## apt-xapian-index est LE paquet qui fait ramer votre Mint ; il sert principalement pour la recherche rapide dans Synaptic (recherche qui bug toujours par rapport à la recherche "normale"). Ce service tourne en tâche de fond pour tenir à jour votre cache APT avec les actions qui sont faites entre les différents outils (apt, apt-get, aptitude, etc). Perso, j'utilise aptitude du début à la fin, avoir un service qui tourne rien que pour ça est au mieux inutile au pire carrément stupide.
sudo aptitude remove apt-xapian-index
## Pulseaudio (fait double emploi avec ALSA et je ne me sers pas du lecteur audio intégré)
sudo aptitude remove pulseaudio pulseaudio-module-x11 pulseaudio-utils
## Bye bye Apache, je ne me sers plus de toi.
sudo aptitude remove apache2-bin
## Bye bye les firmware inutiles pour ma machine.
sudo aptitude remove atmel-firmware zd1211-firmware
## Un lecteur de musique dont je ne me sers pas.
sudo aptitude remove banshee
## Je ne suis pas aveugle, brltty est pour les claviers en braille, espeak est un synthétiseur vocal, speech-dispatcher sers à diffuser le son du synthétiseur.
sudo aptitude remove brltty espeak espeak-data speech-dispatcher speech-dispatcher-audio-plugins
## Bye bye le bluetooth.
sudo aptitude remove blueberry bluetooth bluez bluez-cups bluez-firmware bluez-obexd obex-data-server odbcinst odbcinst1debian2
## Bye bye Open JDK / Icedtea, perso j'utilise une version à jour d'OpenJDK / Oracle-JDK :
sudo aptitude remove ca-certificates-java default-jre default-jre-headless icedtea-7-jre-jamvm icedtea-7-plugin icedtea-netx icedtea-netx-common java-common openjdk-7-jre openjdk-7-jre-lib openjdk-7-jre-headless icedtea-plugin tzdata-java
## Bye bye CUPS (je n'utilise pas d'imprimante, le papier ça pollue) :
sudo aptitude remove cups cups-browsed cups-bsd cups-client cups-common cups-core-drivers cups-daemon cups-filters cups-filters-core-drivers cups-ppdc cups-server-common printer-driver-all printer-driver-brlaser printer-driver-c2050 printer-driver-c2esp printer-driver-cjet printer-driver-dymo printer-driver-escpr printer-driver-foo2zjs-common printer-driver-hpijs printer-driver-min12xxw printer-driver-pnm2ppa printer-driver-ptouch printer-driver-sag-gdi system-config-printer
## Bye bye tout ce qui touche à l'impression :
sudo aptitude remove hplip-data
## Bye bye duplicity, je ne fais pas de backup incrémentaux de mon poste fixe.
sudo aptitude remove duplicity
## Bye bye evolution, je ne me sers pas d'evolution et d'aucune appli l'ayant pour dépendance.
sudo aptitude remove evolution-data-server
## Je n'ai pas de partition Mac / OSX sur mon PC.
sudo aptitude remove hfsplus hfsprogs hfsutils
## Je n'ai pas de périphériques du type iBidule.
sudo aptitude remove ideviceinstaller
## Mon PC est un ordinateur de bureau pas un PC portable ni un mobile ou une clef 3G/4G
sudo aptitude remove laptop-detect pcmciautils mobile-broadband-provider-info
## Tout ce qui a été codé en .NET (désolé mais pas de soft développés avec un compilateur dont la licence est piégée).
sudo aptitude remove mono-4.0-gac mono-gac mono-runtime mono-runtime-common mono-runtime-sgen tomboy
## Mon PC fixe est connecté en câble et n'utilise pas le protocole PPTP.
sudo aptitude remove network-manager-pptp network-manager-pptp-gnome pptp-linux
## Tenir l'heure de son PC synchronisé avec internet
sudo aptitude remove ntpdate
## Bye bye les impressions dans 'le cloud' (beurk).
sudo aptitude remove openprinting-ppds
## Bye bye Pidgin, je ne chat pas.
sudo aptitude remove pidgin pidgin-data pidgin-libnotify
## Je n'ai pas de scanner
sudo aptitude remove sane-utils simple-scan
## Je ne me sers pas du partage bureautique Windows :
sudo aptitude remove samba samba-common samba-common-bin samba-dsdb-modules samba-libs smbclient
## Ma machine est une machine physique, pas une VM donc je vire les drivers virtualbox.
sudo aptitude remove virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
Les optimisations
- Optimiser les accès disque (notatime/nodiratime) & écrire les logs dans la RAM)
- Supprimer l'écriture de log par l'OS
- Swapper que lorsque la RAM est pleine
- Rendre Firefox & Thunderbird plus rapide
- Supprimer la journalisation d'EXT4
- Réduire la consommation mémoire des JVM sous Linux
Désactiver les services :
sudo update-rc.d -f cups remove
sudo update-rc.d -f samba remove
sudo update-rc.d -f samba-ad-dc remove
sudo update-rc.d -f samba-ad-dc remove
sudo update-rc.d -f virtualbox-guest-utils remove
sudo update-rc.d -f virtualbox-guest-x11 remove
sudo update-rc.d -f speech-dispatcher remove
sudo update-rc.d -f brltty remove
sudo update-rc.d -f apache2 remove
Et une petite liste d'actions manuelles :
## Supprimer le cash APT :
sudo sh -c "echo 'Dir::Cache \"\";\nDir::Cache::archives \"\";' >> /etc/apt/apt.conf.d/02nocache"
Réduire le nombre de TTY :
1) sudo nano /etc/default/console-setup
# Remplacer
ACTIVE_CONSOLES="/dev/tty[1-6]"
# par
ACTIVE_CONSOLES="/dev/tty[1-1]"
2) sudo nano /etc/inittab
## Remplacer ceci :
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
## Par ceci
1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
Réduire le temps de boot de grub :
1) Ouvrir le fichier /etc/default/grub
2) Modifier la ligne GRUB_TIMEOUT=10
3) Exécuter la commande :
sudo update-grub
À tout ceux qui me disent qu'ils veulent plus de sécurité et qu'un peu moins de liberté contre cette sécurité est légitime, nous commençons a percevoir les premiers effets.
3 an et demi et en détention pour avoir fuit l'excision... Bravo Hollande, Valls, Cazeneuve, Molina et Sodini comme le dit l'auteur. Sauf que j'ajoute ces personnes à la longue liste de ceux pour qui je ne voterai jamais.