Je développe une lib en Kotlin (jusque là normal) et disposant de deux PC, il m'arrive de démarrer le travail sur l'un et de le finir sur l'autre (encore une fois normal). Sauf que... Sur mon PC portable, que nous appellerons le PC-P, impossible de compiler la même lib au même numéro de commit (une erreur obscure émane du JDK lui-même) alors que sur mon PC fixe, que nous appellerons PC-F, aucun problème.
C'est partie pour l'enquête ! #StoryTime
1) Mes outils ne sont pas à jour sur l'un des deux postes
Le PC-P ayant les dernières versions mais pas le PC-F, j'aligne le tout (OpenJDK, Intellij, OS, Maven, etc) dans les dernières versions disponibles et non, même résultat. PC-F ça marche, PC-P ça plante !
2) J'accuse le répo local de Maven.
Je drop l'intégralité du répo sur les deux machines, je rebuild avec les mêmes lignes de commande, rien n'y fait.
3) J'accuse le compilateur Kotlin.
Ayant fait une montée de version vers la 1.3.72 je me dis que cette toute dernière version est peut-être instable. Du coup je décrémente sa version à la 1.3.41. Toujours ce fichu problème (il s'agit un JVM access FileNotFound au passage - erreur que je n'avais jamais vu de ma vie).
4) J'accuse mon code
Aparté : oui seulement au bout de 4 étapes mais les trois premières ne me demandaient pas beauoup d'effort.
Je reviens en arrière surun commit, deux commits, cinq commits, 17 commits plus loin et ça marche enfin sur les deux... Sachant que tous mes commits ont été stashés et squashés vous n’imaginez pas le nombre de lignes modifiées... #Pleur
Après investigation, j'arrive au point où j'identifie une classe de test mais plante-t-elle à la compile ou au run ? Je commence à lancer un mvn test-compile
et ça marche. Je lance un mvn test
et ça pète mais toujours pas d'indice.
#FastForward Il se passe une nuit et j'en parle à @Lenny le lendemain. Il teste sur son poste et lui-aussi sa plante. Sauf qu'ayant une version plus ancienne de Mint mais aussi du JDK il voit un message différent du mien : un FileNotFound qui indique une classe, précisément classDeTest$NomDeMethod.class (ce sont les classes virtuelles que créé Java).
Je lui demande de prendre tout le chemin de fichier et d'effectuer un touch (car le chemin à l'air assez long) et le touch pète ! #PremièreVictoire
=> Conclusion rapide : le chemin de fichier est trop long. Mais alors pourquoi est-ce que ça marche sur mon PC-F et pas sur mon PC-P !!? #WTF
... Petit moment de suspense... Ur ur ur (^__^)
Réponse :
Le PC-P de @Lenny tout comme le mien ont une partition Ext4 chiffrée ! Or mon PC Fixe a une partition en clair et il faut savoir qu'une partoche Ext4 en claire permet des chemins de fichiers de 255 caractères tandis qu'une Ext4 chiffrée est limitée à 143 caractères ! Le voilà notre coupable...
Vous n'avez pas idée des heures que j'ai perdues à cause de ce comportement mais je suis tellement contente d'avoir trouvé !