1
- Démo de la présentation "Le classpath n'est pas mort... mais presque"
1
+ Démo de la présentation jigsaw / classpass
2
2
---------------
3
3
4
- Ce projet a servi pour la démo à DevoxxFR 2013
4
+ Ce projet a servi pour la démo de la conférence "Le classpath n'est pas mort... mais presque" à DevoxxFR 2013.
5
+ Il a ensuite évolué vers Jigsaw en 2016.
5
6
6
- Préparation
7
- -----------
8
-
9
- 0-Prérequis : utiliser JDK 8, Maven est configuré ainsi.
10
-
11
- 1° étape : cloner le projet. Ben oui, c'est du git.
12
-
13
- git clone git://github.com/hasalex/classpath-demo.git
14
-
15
- cloner et builder le projet tomcat-modules dont il depend
16
- cf. https://github.com/hasalex/tomcat-modules
17
-
18
- Pour cloner sous eclipse avec eGit, ajouter à la racine le fichier .project avant d'importer le projet
19
- Ceci pour definir un projet maven multi-modules.
20
-
21
- 2° étape : créer un répertoire de travail
22
-
23
- mkdir classpath-demo-work
24
- cd classpath-demo-work
25
- sh ../classpath-demo/scripts/prepare.sh
26
-
27
- Rem. : pour l'utiliser sous l'os windows utiliser 'git bash' : ca marche
28
- par exemple pour setter le JAVA_HOME, ajouter en debut de script (attention au chemin des repertoires !)
29
- export JAVA_HOME=/c/Java/jdk1.8.0_102
30
- export PATH=$JAVA_HOME/bin:$PATH
31
-
32
- Rem. : le script doit subir quelques améliorations, par exemple pour la copie de jboss-module.jar
33
-
34
- Démo 1 : classpath
35
- -----------
36
-
37
- # Build with maven
38
- export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
39
- ../classpath-demo/scripts/prepare-classpath.sh
40
-
41
- # Ça ne marche pas
42
- java Count 40 45
43
-
44
- # Ça marche
45
- java -cp lib/misc-example.jar Count 40 45
46
-
47
- Démo 2 : bootclasspath
48
- -----------
49
-
50
- # Court-circuiter le Integer par défaut
51
- java -Xbootclasspath/p:lib/misc-example.jar Count 40 45
52
-
53
- # En théorie, le endorsed ne devrait pas avoir d'effet sur Integer. En réalité,...
54
- java -Djava.endorsed.dirs=lib Count 40 45
55
-
56
- Démo 3 : URLClassLoader
57
- -----------
58
-
59
- # Ça ne marche pas
60
- java -cp lib/message-launcher.jar Hello
61
-
62
- # Ça marche
63
- java -cp "lib/*" Hello
64
-
65
- # Ça marche
66
- java -cp lib/message-launcher.jar HelloViaURL
67
-
68
- # Ça ne marche pas
69
- java -cp lib/message-launcher.jar:lib/message-service.jar HelloViaURL
70
-
71
- Démo 4 : Custom ClassLoader
72
- -----------
73
-
74
- # Build (dans le bon répertoire)
75
- cd ../classpath-demo; mvn install; cd ../classpath-demo-work
76
-
77
- # Ça marche
78
- java -cp lib/message-launcher.jar HelloViaMvnRepo 2.0-SNAPSHOT
79
- # Ça marche
80
- java -cp lib/message-launcher.jar HelloViaMvnRepo 2.0-SNAPSHOT local
81
-
82
- # Ça ne marche pas
83
- java -cp lib/message-launcher.jar:lib/message-service.jar HelloViaMvnRepo 2.0-SNAPSHOT
84
- # Ça marche
85
- java -cp lib/message-launcher.jar:lib/message-service.jar HelloViaMvnRepo 2.0-SNAPSHOT local
86
-
87
- Démo 5 : jar hell
88
- -----------
89
-
90
- # Ça ne marche pas
91
- java -cp "lib/*" Hello log
92
-
93
- Démo 6 : jboss modules
94
- -----------
95
-
96
- # Build (dans le bon répertoire)
97
- ../classpath-demo/scripts/prepare-jboss-modules.sh
98
-
99
- # Ça marche, comme avant (si les dépendances ont les bons slots)
100
- java -jar jboss-modules/jboss-modules.jar -mp jboss-modules fr.sewatech.message-launcher
101
- # Ça marche, mieux qu'avant
102
- java -jar jboss-modules/jboss-modules.jar -mp jboss-modules fr.sewatech.message-launcher log
103
-
104
- Démo 7 : jigsaw
105
- -----------
106
-
107
- # OK
108
- java --module-path jigsaw-modules -m message.launcher/Hello
109
- # KO
110
- java --module-path jigsaw-modules -m message.launcher/Hello log
111
-
112
- Démo 8 : modular JDK
113
- -----------
114
-
115
- # compiler misc-example sans "requires java.xml.bind"
116
-
117
- Démo 9 : jigsaw - mode classpath
118
- -----------
119
-
120
- # Ça marche encore
121
- java -cp jigsaw-modules/misc-examples.jar Count 40 45
122
- java -cp "jigsaw-modules/*" Hello
123
-
124
- # Ça ne marche plus
125
- java -cp lib/misc-examples.jar fr.sewatech.classpath.example.JaxBExample
126
- # Ça marche
127
- java --add-modules java.xml.bind -cp lib/misc-examples.jar fr.sewatech.classpath.example.JaxBExample
128
-
129
- Démo 10 : requires
130
- -----------
131
-
132
- # Montrer le code
133
- # - automatic module
134
-
135
- # Dans message-service
136
- # virer "requires message.common"
137
- # => compile HS
138
-
139
- # Dans message-printer
140
- # passer "requires message.common" en transitive
141
-
142
- # static / optional
143
- java --module-path jigsaw-modules -m misc.examples/fr.sewatech.classpath.example.JaxBExample
144
- # dans misc-example, mettre "requires java.xml.bind" en static
145
- java --module-path jigsaw-modules -m misc.examples/fr.sewatech.classpath.example.JaxBExample
146
- java --add-modules java.xml.bind --module-path jigsaw-modules -m misc.examples/fr.sewatech.classpath.example.JaxBExample
147
-
148
- Démo 11 : export
149
- -----------
150
-
151
- # Patch slf4j with scripts/prepare-slf4j.sh
152
- java --module-path jigsaw-modules -m message.launcher/Hello log
153
- # l'erreur est plus explicite ; si on avait eu ce jar à la compilation,l'erreur aurait eu lieu à la compilation
154
-
155
- Démo 12 : classloader
156
- -----------
157
-
158
- # OK
159
- java -cp jigsaw-modules/message-launcher.jar HelloViaURL
160
- # KO
161
- java -cp jigsaw-modules/message-launcher.jar:lib/message-service.jar HelloViaURL
162
-
163
- # Erreur : -Xbootclasspath/p is no longer a supported option
164
- java -Xbootclasspath/p:jigsaw-modules/misc-examples.jar Count 40 45
165
- # Erreur : -Djava.endorsed.dirs=lib is not supported
166
- java -Djava.endorsed.dirs=lib Count 40 45
167
-
168
- # Prepare patch with scripts/prepare-patch.sh
169
- java --module-path jigsaw-modules -m misc.examples/Count
170
- java --patch-module java.base=../classpath-demo/misc-examples/target/patch-classes --module-path jigsaw-modules -m misc.examples/Count
171
-
172
- Annexe
173
- -----------
174
-
175
- # KO
176
- java -cp lib/message-launcher.jar Hello
177
- # OK
178
- java -cp "lib/*" Hello
179
- # OK
180
- java -cp lib/message-launcher.jar HelloViaURL
181
- # KO
182
- java -cp lib/message-launcher.jar:lib/message-service.jar HelloViaURL
183
- # OK
184
- java -cp lib/message-launcher.jar HelloViaMvnRepo 2.0-SNAPSHOT
185
- # OK
186
- java -cp lib/message-launcher.jar HelloViaMvnRepo 2.0-SNAPSHOT local
187
- # KO
188
- java -cp lib/message-launcher.jar:lib/message-service.jar HelloViaMvnRepo 2.0-SNAPSHOT
189
- # OK
190
- java -cp lib/message-launcher.jar:lib/message-service.jar HelloViaMvnRepo 2.0-SNAPSHOT local
191
- # KO
192
- java -cp "lib/*" Hello log
193
-
194
- # expliquer les modules internes (java.xml.bind)
195
- java -cp lib/misc-examples.jar Standard
196
- java --add-modules java.xml.bind -cp lib/misc-examples.jar Standard
197
-
198
- # Build (dans le bon répertoire) avec JDK 9 avec jigsaw-nightly
199
- export JAVA_HOME=~/Projet/hasalex/jigsaw/jdk-9b138.jdk/Contents/Home
200
- cd ../classpath-demo; mvn clean install -Pjigsaw; cd ../classpath-demo-work
201
-
202
- # OK
203
- java --module-path jigsaw-modules -m message.launcher/HelloViaURL
204
- # OK
205
- java --module-path jigsaw-modules -m message.launcher/HelloViaMvnRepo 2.0-SNAPSHOT
206
- java --module-path jigsaw-modules -m message.launcher/HelloViaMvnRepo 2.0-SNAPSHOT local
207
- # KO
208
- java --module-path jigsaw-modules -m message.launcher/Hello log
209
-
210
- # Modules vs Classpath : aucun changement visible
211
- # classpath = unnamed module
212
- java --add-modules java.xml.bind -cp lib/misc-examples.jar Standard
213
- java --module-path jigsaw-modules -m misc.examples/Standard
7
+ Le détail de la démo est expliqué dans le répertoire docs.
0 commit comments