SlideShare ist ein Scribd-Unternehmen logo
1 von 103
Downloaden Sie, um offline zu lesen
Préparez-vous à
la modularité
selon Java 9
Rémi Forax
Alexis Hassler
#DevoxxFR
Official Hashtag
#DevoxxFR
#PreparezVousALaModularitéSelonJava9AvecRemiForaxEtAlexisHassle
#DevoxxFR
Dramatic intro
#DevoxxFR
Classpath - compile time
Build tool
Maven
Gradle
…
#DevoxxFR
Classpath - runtime
jarjarjarjar jarjarjar jar jarjar asm-3.1.jarjarjar asm-2.3.jar
#DevoxxFR
Scale Down
rt.jar
66 MB
guava.jar
2.3 MB
spring-
context.jar
1 MB
#DevoxxFR
Security
CVE-2015-6420, …
#DevoxxFR
Security
commons-collection.jar
#DevoxxFR
Security
commons-collection.jar
#DevoxxFR
Modular JDK
#DevoxxFR
Modular JDK
rt.jar tools.jar
#DevoxxFR
Modular JDK
java.basejava.desktop java.sql
java.naming java.xmljava.compiler
java.logging
java.management
#DevoxxFR
Modular JDK
java.basejava.desktop
java.sql
java.naming
java.xml
java.compiler
java.logging
java.management
#DevoxxFR
Deprecated JDK modules
java.xml.bind java.xml.ws
java.xml.ws.annotations
java.transaction
java.corba
java.activation
#DevoxxFR
Deprecated JDK modules
69… back to Java EE
#DevoxxFR
Non-standard JDK modules
sun.* com.sun.*
Deleted classes
Hidden packages
#DevoxxFR
Non-standard JDK modules
Internal modules
jdk.net jdk.attach
jdk.httpserver
jdk.*
#DevoxxFR
Module descriptor
/* module-info.java */
module app.main {
    requires java.base;
    requires java.sql;
    requires java.management;
}
#DevoxxFR
Build module
javac -d target/main/exploded                                  
      --source-path src/main/java                              
      $(find src/main/java -name "*.java")
jar --create                                                   
    --file target/main/artifact/app.main-1.0.jar               
    -C target/exploded/app.main .
#DevoxxFR
Run module
java --module-path modules                                
     --class-path dependencies/library.jar                
     -m app.main/com.app.main.Main
#DevoxxFR
java.base
java.xml.bind
jdk.httpserver java.desktop
image.show
#DevoxxFR
Modular application
#DevoxxFR
Modular application
app.main
app.module1
app.module2
#DevoxxFR
Module descriptor
/* module-info.java */
module app.main {
    requires java.sql;
    requires java.management;    
    requires app.module1;
    requires app.module2;
}
#DevoxxFR
Export package
module app.module1 {
    …;
    exports com.app.api;     
}
#DevoxxFR
Multi-modules layout
1 project = n modules
javac -d target/main/exploded                           
      --module-source-path src/main/java                
      $(find src/main/java -name "*.java")
#DevoxxFR
Multi-modules layout
src/main/java
app.main
module-info.java
fr/app/pkg
... .java
fr/app/main
Main.java
app.api
module-info.java
a folder with a qualified name
...
#DevoxxFR
Create module
jar --create                                                   
    --file target/main/artifact/app.main-1.0.jar               
    --main-class com.app.main.Main                             
    -C target/exploded/app.main .
#DevoxxFR
The Jigsaw Sandwich
Runtime
Compile time
#DevoxxFR
The Jigsaw Sandwich
app.main
@1.1
app.module1
@1.0
app.module2
@1.1
#DevoxxFR
Create module
jar --create                                                   
    --file target/main/artifact/app.main-1.0.jar               
    --module-version=1.0                                       
    --main-class com.app.main.Main                             
    -C target/exploded/app.main .
#DevoxxFR
fr.sw.img.web
fr.sw.img.db
fr.sw.img.inmemoryfr.sw.img.service fr.sw.img.data
fr.sw.common.*
#DevoxxFR
image.show
sw.common
image.backend
image.data
#DevoxxFR
Encapsulation
#DevoxxFR
Visibility
Public
Protected
Package
Private
#DevoxxFR
Visibility
Public
Protected
Package
Private
Inside a module
#DevoxxFR
Visibility
Public       For other module
module app.api {
    …;
    exports com.app.api;
}
#DevoxxFR
Split package
#DevoxxFR
Regular export
module app.impl {
    …
    exports com.app.internal;    
}
#DevoxxFR
app.main
com.app.internal
app.impl
app.api
com.app.api
?
Restricted export
module app.impl {
    …
    exports com.app.internal    
         to app.api
}
#DevoxxFR
app.main
com.comp.app.internal
app.impl
app.api
com.comp.app.api
?
fr.sw.img.service
image.backend
fr.sw.img.db
fr.sw.img.inmemory
#DevoxxFR
image.backend
fr.sw.img.service
image.db
fr.sw.img.db
image.inmem
fr.sw.img.inmemory
#DevoxxFR
sun.misc.Unsafe
module java.base {
    …
    exports sun.misc;
    exports jdk.internal.misc to           
        java.rmi,
        java.sql,
        jdk.charsets,
        …
}
module jdk.unsupported {
    exports sun.misc;
}
 New internal unsafe API
(hidden)

Keep sun.misc in 9,
remove features when
public replacement APIs exist
#DevoxxFR
Deep reflection
 
  field.setAccessible(true);
 
  java.lang.reflect.InaccessibleObjectException
#DevoxxFR
Deep reflection
Open a package
module app.impl {
    …;
    opens exports com.app.internal;
}
Open all the packages of the module
open module app.impl {
    …;
}
#DevoxxFR
Module dependency
#DevoxxFR
Transitive dependency
app.main
app.module1
app.module2
transitive
#DevoxxFR
Transitive dependency
module app.module1 {
    requires …;
    requires transitive app.module2;
}
module app.main {
    requires …;
    requires app.module1;
    requires app.module2;
}
#DevoxxFR
Static dependency
module app.module1 {
    requires …;
    requires static app.module2;   
}
Compile time only
#DevoxxFR
Plain old jar
app.main
app.module1
app.module2
old-lib-1.2
?
#DevoxxFR
Plain old jar
No dependency to classpath
javac --class-path deps/old-lib-1.2.jar                  
      …
#DevoxxFR
Plain old jar
app.main app.module1
old-lib-1.2classpath
modulepath
#DevoxxFR
Automatic Module
Plain old jar in module-path
javac --module-path deps                                 
      …
module app.module1 {
    …;
    requires old.lib;       
}
#DevoxxFR
Automatic Module
app.main app.module1
old-lib-1.2
classpath
modulepath
#DevoxxFR
Mixed mode
app.main app.module1
old-lib
classpath
modulepath
other-lib
#DevoxxFR
Mixed mode
javac --module-path deps                                
      --class-path deps/other-lib.jar                   
      …
#DevoxxFR
image.show slf4j-api
slf4j-simple
#DevoxxFR
Module Service
#DevoxxFR
Interface / Implementations
#DevoxxFR
Main
Service
ServiceImpl
Interface / Implementations
#DevoxxFR
Main
Service
ServiceImpl
User / Provider
module app.main {
    requires app.api;
    uses … .api.Service;    
}
module app.impl {
    requires app.api;
    provides … .api.Service
        with … .service.ServiceImpl;    
}
#DevoxxFR
Main
Service
ServiceImpl
module app.api {
    exports … .api;    
}
Usage
    …
    ServiceLoader.load(ModuleInput.class)
                 .stream()
                 . … ;
    …
#DevoxxFR
image.db
image.inmemory
image.backend
sw.fwk
ImageDB
ImageInMemory
DAO
#DevoxxFR
Running on Java 9
Compiling in Java 8
#DevoxxFR
Big kill switch
--permit-illegal-access
 This option will only be supported in JDK 9.
It will be removed in JDK 10.
#DevoxxFR
Command line java / javac
Add root module
--add-modules
#DevoxxFR
Command line java / javac
--add-reads module=anotherModule
--add-exports module/package=anotherModule
--add-opens module/package=anotherModule
#DevoxxFR
jdeps
Diagnostic tool
since Java 8
jdeps --jdk-internals
#DevoxxFR
Tests
#DevoxxFR
Test module
src/main/java
module-info.java
fr/app/pkg
AClass.java
src/test/java
module-info.java
fr/app/pkg/test
AClassTest.java
#DevoxxFR
Test module
Compile time
app.module1
com.app.pkg1
<<requires>> <<requires>>
com.app.pkg1.test
app.module1.test
<<reads>>
junit
org.junit
#DevoxxFR
Test module
Test module-info.java
module app.module1.test {     
    requires junit;
    requires app.module1;
}
#DevoxxFR
Test module
Compile
$JAVA_HOME/bin/javac                                             
    -d target/test/exploded                                      
    --module-path dependencies:target/main/artifact              
    $(find src/test/java/ -name "*.java")
#DevoxxFR
Test module
Run time
hamcrest-core
app.module1
com.app.pkg1
<<requires>> <<requires>>
com.app.pkg1.test
app.module1.test
<<reads>><<reflection>>
junit
org.junit
#DevoxxFR
Test module
Run
$JAVA_HOME/bin/java                                                 
    --module-path dependencies:                                     
                  target/main/artifact:target/test/artifact         
    --class-path dependencies/hamcrest-core-1.3.jar                 
    --add-modules app.module1.test                                  
    -m junit/org.junit.runner.JUnitCore com.app.pkg1.test.AClassTest
#DevoxxFR
Single module
src/main/java
module-info.java
fr/app/pkg
AClass.java
src/test/java
module-info.java
fr/app/pkg
AClassTest.java
#DevoxxFR
Single module
Compile time
junit
<<requires>>
app.module1
com.app.pkg1com.app.pkg1org.junit
#DevoxxFR
Single module
Compile
$JAVA_HOME/bin/javac                                             
    -d target/test/exploded                                      
    --module-path dependencies:target/main/artifact              
    --add-reads app.module1=junit                                
    --add-modules junit                                          
    --patch-module app.module1=src/test/java                     
    $(find src/test/java/ -name "*.java")
#DevoxxFR
Single module
Run time
app.module1
com.app.pkg1com.app.pkg1
hamcrest-core
<<requires>>
<<reflection>>
junit
org.junit
#DevoxxFR
Single module
Run
$JAVA_HOME/bin/java                                              
    --module-path dependencies:                                  
                  target/main/artifact                           
    --class-path dependencies/hamcrest-core-1.3.jar              
    --add-modules app.module1                                    
    --add-reads app.module1=junit                                
    --add-exports app.module1/com.app.pkg1=junit                 
    --patch-module app.module1=target/test/exploded              
    -m junit/org.junit.runner.JUnitCore com.app.pkg1.AClassTest
#DevoxxFR
junit image.inmem
fr.sw.img.inmemoryfr.sw.img.inmemoryorg.junit
#DevoxxFR
Going Native
#DevoxxFR
jlink
Custom runtime image
Specific for a platform
For small devices or in the cloud
#DevoxxFR
jlink
$ jlink --module-path $JAVA_HOME/jmods:            
                      target/modules               
        --add-modules app.main,                    
                      app.service                  
        --launcher appx=app.main                   
        --output target/image
#DevoxxFR
#DevoxxFR
Minimal VM
$ jlink …                                          
        --vm=minimal                               
        --output image
size of the classical VM: 20 megs
size of the minimal VM: 3 megs
#DevoxxFR
Ahead Of Time compilation
 experimental feature !
Module ⇒ shared library
.so, .dll, .dynlib
$ jaotc --module-path target/modules            
        --module app.main
#DevoxxFR
Ahead Of Time compilation
 experimental feature !
Run in AOT mode
./image/bin/java                                          
    -XX:+UseAOT                                           
    -XX:AOTLibrary=./lib/libjava.base.so                  
    …
#DevoxxFR
Benchmarks
#DevoxxFR
Benchmarks
#DevoxxFR
Conclusion
#DevoxxFR
Jigsaw Goals
Reliable configuration
No classpath anymore
compile time / runtime fidelity
#DevoxxFR
Jigsaw Goals
Scale down the platform
downsized unit of re-use
#DevoxxFR
Jigsaw Goals
Strong encapsulation
Separate public types from implementation
Enhanced security
#DevoxxFR
Jigsaw Goals
Closed World
Ahead of time optimizations
#DevoxxFR
Jigsaw Goals
Reliable configuration
Scale down the platform
Strong encapsulation
Closed World
#DevoxxFR
Planning
#DevoxxFR
Questions ?
#DevoxxFR
Références
Download JDK 9 Early Access
https://jdk9.java.net/download/
Oracle JDK 9 Documentation
http://docs.oracle.com/javase/9/
JavaOne, DevoxxBE talks
http://openjdk.java.net/projects/jigsaw/talks/
#DevoxxFR
Références
Demo
https://github.com/hasalex/devoxxfr17-demo
Moduletools
https://github.com/forax/moduletools
Pro
https://github.com/forax/pro
#DevoxxFR
Merci
#DevoxxFR

Weitere ähnliche Inhalte

Was ist angesagt?

JRuby on Rails Deployment: What They Didn't Tell You
JRuby on Rails Deployment: What They Didn't Tell YouJRuby on Rails Deployment: What They Didn't Tell You
JRuby on Rails Deployment: What They Didn't Tell Youelliando dias
 
Towards Continuous Deployment with Django
Towards Continuous Deployment with DjangoTowards Continuous Deployment with Django
Towards Continuous Deployment with DjangoRoger Barnes
 
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...Jorge Hidalgo
 
Managed Beans: When, Why and How
Managed Beans: When, Why and HowManaged Beans: When, Why and How
Managed Beans: When, Why and HowRussell Maher
 
Head toward Java 14 and Java 15
Head toward Java 14 and Java 15Head toward Java 14 and Java 15
Head toward Java 14 and Java 15Yuji Kubota
 
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...0xdaryl
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Saeed Zarinfam
 
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Puppet
 
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Robert Scholte
 
Capybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyCapybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyDeepak Chandella
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP applicationJavier López
 
The Proxy Fairy and the Magic of Spring @JAX Mainz 2021
The Proxy Fairy and the Magic of Spring @JAX Mainz 2021The Proxy Fairy and the Magic of Spring @JAX Mainz 2021
The Proxy Fairy and the Magic of Spring @JAX Mainz 2021Victor Rentea
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.Javier López
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Robert Scholte
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09Michael Neale
 
DNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance BoostDNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance BoostChristoph Adler
 
Java11 New Features
Java11 New FeaturesJava11 New Features
Java11 New FeaturesHaim Michael
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawComsysto Reply GmbH
 

Was ist angesagt? (20)

JRuby on Rails Deployment: What They Didn't Tell You
JRuby on Rails Deployment: What They Didn't Tell YouJRuby on Rails Deployment: What They Didn't Tell You
JRuby on Rails Deployment: What They Didn't Tell You
 
Towards Continuous Deployment with Django
Towards Continuous Deployment with DjangoTowards Continuous Deployment with Django
Towards Continuous Deployment with Django
 
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
 
Managed Beans: When, Why and How
Managed Beans: When, Why and HowManaged Beans: When, Why and How
Managed Beans: When, Why and How
 
Head toward Java 14 and Java 15
Head toward Java 14 and Java 15Head toward Java 14 and Java 15
Head toward Java 14 and Java 15
 
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)
 
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
 
Migrating to Java 9 Modules
Migrating to Java 9 ModulesMigrating to Java 9 Modules
Migrating to Java 9 Modules
 
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
 
Capybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyCapybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using ruby
 
Js tacktalk team dev js testing performance
Js tacktalk team dev js testing performanceJs tacktalk team dev js testing performance
Js tacktalk team dev js testing performance
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
 
The Proxy Fairy and the Magic of Spring @JAX Mainz 2021
The Proxy Fairy and the Magic of Spring @JAX Mainz 2021The Proxy Fairy and the Magic of Spring @JAX Mainz 2021
The Proxy Fairy and the Magic of Spring @JAX Mainz 2021
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09
 
DNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance BoostDNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance Boost
 
Java11 New Features
Java11 New FeaturesJava11 New Features
Java11 New Features
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project Jigsaw
 

Ähnlich wie DevoxxFR17 - Préparez-vous à la modularité selon Java 9

Java 9 and the impact on Maven Projects (Devoxx 2016)
Java 9 and the impact on Maven Projects (Devoxx 2016)Java 9 and the impact on Maven Projects (Devoxx 2016)
Java 9 and the impact on Maven Projects (Devoxx 2016)Robert Scholte
 
Webinar: Creating an Effective Docker Build Pipeline for Java Apps
Webinar: Creating an Effective Docker Build Pipeline for Java AppsWebinar: Creating an Effective Docker Build Pipeline for Java Apps
Webinar: Creating an Effective Docker Build Pipeline for Java AppsCodefresh
 
JavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and EcosystemJavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and EcosystemAlexander Casall
 
Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1Netcetera
 
Java 9 / Jigsaw - AJUG/VJUG session
Java 9 / Jigsaw - AJUG/VJUG  sessionJava 9 / Jigsaw - AJUG/VJUG  session
Java 9 / Jigsaw - AJUG/VJUG sessionMani Sarkar
 
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DaliaAboSheasha
 
Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Robert Scholte
 
It pro dev_birbilis_20101127_en
It pro dev_birbilis_20101127_enIt pro dev_birbilis_20101127_en
It pro dev_birbilis_20101127_enGeorge Birbilis
 
Vagrant or docker for java dev environment
Vagrant or docker for java dev environmentVagrant or docker for java dev environment
Vagrant or docker for java dev environmentOrest Ivasiv
 
Modern Java Workshop
Modern Java WorkshopModern Java Workshop
Modern Java WorkshopSimon Ritter
 
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...Sigma Software
 
Haj 4344-java se 9 and the application server-1
Haj 4344-java se 9 and the application server-1Haj 4344-java se 9 and the application server-1
Haj 4344-java se 9 and the application server-1Kevin Sutter
 
Java in a world of containers
Java in a world of containersJava in a world of containers
Java in a world of containersDocker, Inc.
 
Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018Arun Gupta
 
RichFaces - Testing on Mobile Devices
RichFaces - Testing on Mobile DevicesRichFaces - Testing on Mobile Devices
RichFaces - Testing on Mobile DevicesPavol Pitoňák
 
Aug penguin16
Aug penguin16Aug penguin16
Aug penguin16alhino
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationNicolas Fränkel
 

Ähnlich wie DevoxxFR17 - Préparez-vous à la modularité selon Java 9 (20)

Java 9 and the impact on Maven Projects (Devoxx 2016)
Java 9 and the impact on Maven Projects (Devoxx 2016)Java 9 and the impact on Maven Projects (Devoxx 2016)
Java 9 and the impact on Maven Projects (Devoxx 2016)
 
Webinar: Creating an Effective Docker Build Pipeline for Java Apps
Webinar: Creating an Effective Docker Build Pipeline for Java AppsWebinar: Creating an Effective Docker Build Pipeline for Java Apps
Webinar: Creating an Effective Docker Build Pipeline for Java Apps
 
Maven2交流
Maven2交流Maven2交流
Maven2交流
 
JavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and EcosystemJavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and Ecosystem
 
Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1
 
Java 9 / Jigsaw - AJUG/VJUG session
Java 9 / Jigsaw - AJUG/VJUG  sessionJava 9 / Jigsaw - AJUG/VJUG  session
Java 9 / Jigsaw - AJUG/VJUG session
 
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11
 
Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)
 
Ja coco ignite
Ja coco igniteJa coco ignite
Ja coco ignite
 
It pro dev_birbilis_20101127_en
It pro dev_birbilis_20101127_enIt pro dev_birbilis_20101127_en
It pro dev_birbilis_20101127_en
 
Vagrant or docker for java dev environment
Vagrant or docker for java dev environmentVagrant or docker for java dev environment
Vagrant or docker for java dev environment
 
Modern Java Workshop
Modern Java WorkshopModern Java Workshop
Modern Java Workshop
 
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
Android App Architecture with modern libs in practice. Our way in R.I.D., Ser...
 
Haj 4344-java se 9 and the application server-1
Haj 4344-java se 9 and the application server-1Haj 4344-java se 9 and the application server-1
Haj 4344-java se 9 and the application server-1
 
Java in a world of containers
Java in a world of containersJava in a world of containers
Java in a world of containers
 
Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018
 
RichFaces - Testing on Mobile Devices
RichFaces - Testing on Mobile DevicesRichFaces - Testing on Mobile Devices
RichFaces - Testing on Mobile Devices
 
Getting Native with NDK
Getting Native with NDKGetting Native with NDK
Getting Native with NDK
 
Aug penguin16
Aug penguin16Aug penguin16
Aug penguin16
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous Integration
 

Mehr von Alexis Hassler

LausanneJUG 2017 - Jigsaw est prêt à tuer le classpath
LausanneJUG 2017 - Jigsaw est prêt à tuer le classpathLausanneJUG 2017 - Jigsaw est prêt à tuer le classpath
LausanneJUG 2017 - Jigsaw est prêt à tuer le classpathAlexis Hassler
 
DevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath Java
DevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath JavaDevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath Java
DevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath JavaAlexis Hassler
 
Soft-Shake 2016 : Jigsaw est prêt à tuer le classpath
Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpathSoft-Shake 2016 : Jigsaw  est prêt à tuer le classpath
Soft-Shake 2016 : Jigsaw est prêt à tuer le classpathAlexis Hassler
 
LyonJUG : Comment Jigsaw est prêt à tuer le classpath
LyonJUG : Comment Jigsaw est prêt à tuer le classpath LyonJUG : Comment Jigsaw est prêt à tuer le classpath
LyonJUG : Comment Jigsaw est prêt à tuer le classpath Alexis Hassler
 
INSA Lyon - Java in da Cloud - 06/2016
INSA Lyon - Java in da Cloud - 06/2016INSA Lyon - Java in da Cloud - 06/2016
INSA Lyon - Java in da Cloud - 06/2016Alexis Hassler
 
LorraineJUG - Le classpath n'est pas mort
LorraineJUG - Le classpath n'est pas mortLorraineJUG - Le classpath n'est pas mort
LorraineJUG - Le classpath n'est pas mortAlexis Hassler
 
ElsassJUG - Le classpath n'est pas mort...
ElsassJUG - Le classpath n'est pas mort...ElsassJUG - Le classpath n'est pas mort...
ElsassJUG - Le classpath n'est pas mort...Alexis Hassler
 
INSA - Java in Ze Cloud - 2014
INSA - Java in Ze Cloud - 2014INSA - Java in Ze Cloud - 2014
INSA - Java in Ze Cloud - 2014Alexis Hassler
 
softshake 2014 - Java EE
softshake 2014 - Java EEsoftshake 2014 - Java EE
softshake 2014 - Java EEAlexis Hassler
 
INSA - Java in ze Cloud (2013)
INSA - Java in ze Cloud (2013)INSA - Java in ze Cloud (2013)
INSA - Java in ze Cloud (2013)Alexis Hassler
 
MarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueMarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueAlexis Hassler
 
MarsJUG - Une nouvelle vision des tests avec Arquillian
MarsJUG - Une nouvelle vision des tests avec ArquillianMarsJUG - Une nouvelle vision des tests avec Arquillian
MarsJUG - Une nouvelle vision des tests avec ArquillianAlexis Hassler
 
JUG Summer Camp - Une nouvelle vision des tests avec Arquillian
JUG Summer Camp - Une nouvelle vision des tests avec ArquillianJUG Summer Camp - Une nouvelle vision des tests avec Arquillian
JUG Summer Camp - Une nouvelle vision des tests avec ArquillianAlexis Hassler
 
DevoxxFR 2013 - Arquillian
DevoxxFR 2013 - ArquillianDevoxxFR 2013 - Arquillian
DevoxxFR 2013 - ArquillianAlexis Hassler
 
DevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presqueDevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presqueAlexis Hassler
 
Java in ze Cloud - INSA - nov. 2012
Java in ze Cloud - INSA - nov. 2012Java in ze Cloud - INSA - nov. 2012
Java in ze Cloud - INSA - nov. 2012Alexis Hassler
 
Arquillian - YaJUG - nov. 2012
Arquillian - YaJUG - nov. 2012Arquillian - YaJUG - nov. 2012
Arquillian - YaJUG - nov. 2012Alexis Hassler
 
JBoss AS 7 - YaJUG - nov. 2012
JBoss AS 7 - YaJUG - nov. 2012JBoss AS 7 - YaJUG - nov. 2012
JBoss AS 7 - YaJUG - nov. 2012Alexis Hassler
 
JBoss AS 7 : Déployer sur terre et dans les nuages
JBoss AS 7 : Déployer sur terre et dans les nuagesJBoss AS 7 : Déployer sur terre et dans les nuages
JBoss AS 7 : Déployer sur terre et dans les nuagesAlexis Hassler
 

Mehr von Alexis Hassler (20)

LausanneJUG 2017 - Jigsaw est prêt à tuer le classpath
LausanneJUG 2017 - Jigsaw est prêt à tuer le classpathLausanneJUG 2017 - Jigsaw est prêt à tuer le classpath
LausanneJUG 2017 - Jigsaw est prêt à tuer le classpath
 
DevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath Java
DevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath JavaDevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath Java
DevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath Java
 
Soft-Shake 2016 : Jigsaw est prêt à tuer le classpath
Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpathSoft-Shake 2016 : Jigsaw  est prêt à tuer le classpath
Soft-Shake 2016 : Jigsaw est prêt à tuer le classpath
 
LyonJUG : Comment Jigsaw est prêt à tuer le classpath
LyonJUG : Comment Jigsaw est prêt à tuer le classpath LyonJUG : Comment Jigsaw est prêt à tuer le classpath
LyonJUG : Comment Jigsaw est prêt à tuer le classpath
 
INSA Lyon - Java in da Cloud - 06/2016
INSA Lyon - Java in da Cloud - 06/2016INSA Lyon - Java in da Cloud - 06/2016
INSA Lyon - Java in da Cloud - 06/2016
 
LorraineJUG - Le classpath n'est pas mort
LorraineJUG - Le classpath n'est pas mortLorraineJUG - Le classpath n'est pas mort
LorraineJUG - Le classpath n'est pas mort
 
LorraineJUG - WildFly
LorraineJUG - WildFlyLorraineJUG - WildFly
LorraineJUG - WildFly
 
ElsassJUG - Le classpath n'est pas mort...
ElsassJUG - Le classpath n'est pas mort...ElsassJUG - Le classpath n'est pas mort...
ElsassJUG - Le classpath n'est pas mort...
 
INSA - Java in Ze Cloud - 2014
INSA - Java in Ze Cloud - 2014INSA - Java in Ze Cloud - 2014
INSA - Java in Ze Cloud - 2014
 
softshake 2014 - Java EE
softshake 2014 - Java EEsoftshake 2014 - Java EE
softshake 2014 - Java EE
 
INSA - Java in ze Cloud (2013)
INSA - Java in ze Cloud (2013)INSA - Java in ze Cloud (2013)
INSA - Java in ze Cloud (2013)
 
MarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueMarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presque
 
MarsJUG - Une nouvelle vision des tests avec Arquillian
MarsJUG - Une nouvelle vision des tests avec ArquillianMarsJUG - Une nouvelle vision des tests avec Arquillian
MarsJUG - Une nouvelle vision des tests avec Arquillian
 
JUG Summer Camp - Une nouvelle vision des tests avec Arquillian
JUG Summer Camp - Une nouvelle vision des tests avec ArquillianJUG Summer Camp - Une nouvelle vision des tests avec Arquillian
JUG Summer Camp - Une nouvelle vision des tests avec Arquillian
 
DevoxxFR 2013 - Arquillian
DevoxxFR 2013 - ArquillianDevoxxFR 2013 - Arquillian
DevoxxFR 2013 - Arquillian
 
DevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presqueDevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presque
 
Java in ze Cloud - INSA - nov. 2012
Java in ze Cloud - INSA - nov. 2012Java in ze Cloud - INSA - nov. 2012
Java in ze Cloud - INSA - nov. 2012
 
Arquillian - YaJUG - nov. 2012
Arquillian - YaJUG - nov. 2012Arquillian - YaJUG - nov. 2012
Arquillian - YaJUG - nov. 2012
 
JBoss AS 7 - YaJUG - nov. 2012
JBoss AS 7 - YaJUG - nov. 2012JBoss AS 7 - YaJUG - nov. 2012
JBoss AS 7 - YaJUG - nov. 2012
 
JBoss AS 7 : Déployer sur terre et dans les nuages
JBoss AS 7 : Déployer sur terre et dans les nuagesJBoss AS 7 : Déployer sur terre et dans les nuages
JBoss AS 7 : Déployer sur terre et dans les nuages
 

Kürzlich hochgeladen

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 

Kürzlich hochgeladen (20)

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 

DevoxxFR17 - Préparez-vous à la modularité selon Java 9