SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
Stephan Herrmann
Supporting Java™ 9 in Eclipse
—
A critical perspective
J
D
T
Simply Retail.
2
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Supporting Java™ 9 in Eclipse
A Play in 4 Acts
3
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 1
What is Jigsaw all about?
That's simple and easy!That's simple and easy!
4
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Simple: Module Syntax vs. OSGi Manifest
module org.m1 { …
requires org.m2;
requires transitive org.m3;
exports org.pack1;
exports org.pack2 to org.m2;
provides org.Ifc with org.Impl;
uses org.Ifc;
Bundle-SymbolicName: org.m1
Require-Bundle: org.m2
org.m3;visibility:=reexport
Export-Package: org.pack1
org.pack2;x-friends=”org.m2”
service.xml
module-info.java MANIFEST.MF
<scr:component
xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"
name="IMyService">
<implementation class="org.Impl"/>
<service>
<provide interface="org.Ifc"/>
</service>
</scr:component>
5
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 1: That's simple and easy!
DEMO: Modules in Eclipse
6
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 2
A closer look at module-info
–
from a tool smith's perspective
Expect a slight
sense of surprise
Expect a slight
sense of surprise
8
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 2: Something's weird
JDT API (1):
org.eclipse.jdt.core.ToolFactory.createScanner(..)
org.eclipse.jdt.core.compiler.IScanner
●
void resetTo(int startPosition, int endPosition)
●
int getNextToken()
org.eclipse.jdt.core.compiler.ITerminalSymbols.TokenNameIdentifer
In Java 9 this API is beyond repair
restricted keywords:
●
“keywords that are keywords when they are keywords, else identifers” [my words]
●
classifcation keyword / identifer happens after parsing
should we remove this API (and break all clients of JDT)?
just hope that nobody will use it for module-info.java?
9
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 2: Something's weird
JDT API (1):
org.eclipse.jdt.core.ToolFactory.createScanner(..)
org.eclipse.jdt.core.compiler.IScanner
●
void resetTo(int startPosition, int endPosition)
●
int getNextToken()
org.eclipse.jdt.core.compiler.ITerminalSymbols.TokenNameIdentifer
In Java 9 this API is beyond repair
restricted keywords:
●
“keywords that are keywords when they are keywords, else identifers” [my words]
●
classifcation keyword / identifer happens after parsing
should we remove this API (and break all clients of JDT)?
just hope that nobody will use it for module-info.java?
import to.uses;
import to.module;
import to.to;
module module {
requires requires;
exports to to exports;
uses module;
provides uses with to;
requires transitive transitive;
}
import to.uses;
import to.module;
import to.to;
module module {
requires requires;
exports to to exports;
uses module;
provides uses with to;
requires transitive transitive;
}
11
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 2: Something's weird
Updating Tools Java™ 8 Java→ ™ 9
cannot be done in a compatible way
12
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3
There is complexity
—
Questions:
What is the meaning of a.b.C1?
Is the reference a.b.C1 legal?
Does Java 9 support split packages?
14
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: Concepts
How we want to see the world:
Module 1
package a
C1 C2C0
package a.b
C1 C3
Module 2
package a.c
C1 C2
package a.b
C1 C4
requires
15
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: Realization
This is the world according to JLS:
Module 1 Module 2
C1
CU1
C0
associated with
CU2
C2
package a
declares
package bis member
within
CU1
C1
CU1
C1
package c
CU2
C2
requires
exports
16
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: unnecessary complexity
Containment
module
package
class
Independent
packages among each other
Module 1
package a
C1 C2C0
package a.b
C1 C3
Module 2
package a.c
C1 C2
package a.b
C1 C4
requires
Emulation by indirect relations
cu is associated to module
cu declares package
cu contains class
Containment
package
sub-package
Mod-
ule 1
Mod-
ule 2C1
C0
CU1
C2
CU2
package a
package b
C1
CU1 CU1
C1
package c
C2
CU2
requires
17
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: Putting it to work
Inside Module2, what does a.b.C1 mean?
a.b.C1 is found in the CU1 associated with Module2
package a.b is uniquely visible from Module2
Module 1 Module 2
C1
CU1
C0CU2
C2
package a
package b
CU1
C1
CU1
C1
package c
CU2
C2
requires
package b
✔
✔
package a
18
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: Putting it to work
Inside Module2, what does a.b.C1 mean?
package a.b is not uniquely visible, could be from Module1 or from Module2
this confguration is illegal
Module 1 Module 2
C1
CU1
C0CU2
C2
package a
package b
CU1
C1
CU1
C1
package c
CU2
C2
requires
CUX
X
19
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: Legal but broken
Module 1 Module 2
C1
CU1
C0CU2
C2
package a
package b
CU1
C1
CU1
C1
package c
CU2
C2
requires
$ java -m Module2
Error occurred during initialization of boot layer
java.lang.LayerInstantiationException: Package a.b in both module Module1 and module Module2
$ _
Need a Layer implementation
that is capable of classloader-based isolation.
Need a Layer implementation
that is capable of classloader-based isolation.
20
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: Legal but asking for trouble
API Leak
API mentions a type, which the client cannot mention
legal
new complexity in the implementation
put overloading and inheritance in the mix: infnite supply of new Java puzzlers
Module 1 Module 2
C1
CU1
C0CU2
C2
package a
package b
CU1
C1
CU1
C1
package c
CU2
C2
requires
public void doSomething(a.b.C1 arg) { … }public void doSomething(a.b.C1 arg) { … }
21
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: Legal but asking for trouble
API Leak
API mentions a type, which the client cannot mention
legal
new complexity in the implementation
put overloading and inheritance in the mix: infnite supply of new Java puzzlers
Module 1 Module 2
C1
CU1
C0CU2
C2
package a
package b
CU1
C1
CU1
C1
package c
CU2
C2
requires
public void doSomething(a.b.C1 arg) { … }public void doSomething(a.b.C1 arg) { … }
Missed Opportunity
●
API leaks should be illegal
●
Or method should be unmentionable for clients
Missed Opportunity
●
API leaks should be illegal
●
Or method should be unmentionable for clients
22
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: summary encapsulation
Split packages
concealed: legal
●
but no promise that the runtime can handle it
●
need a capable Layer implementation
merging a package (like fragment & host bundle) is illegal
●
even if no class-level confict is involved
API leaks
JLS is silent
compilers issue warnings
●
TODO: better coordinate warnings between compilers
25
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 3: There is Complexity
End of Act 3
A simple surface
realized by complexity
26
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4
There's a lot more:
command line options
–illegal-access={permit,warn,debug,deny}
28
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4: Manipulating the Module Graph
Things you can change via CLI options
Add / remove / replace a module
Add a “reads” edge (“requires”)
Expose a package
●
compile time (“exports”)
●
runtime (“opens”)
Merge a module from several sources
●
patching
...
29
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4: Options
Let's map command line options
to UI
30
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4: Options
“Is modular”
Edit: enter the rabbit hole
31
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4: Options
“Is modular”
Edit: enter the rabbit hole
Contents
what you ask for
what you get
--limit-modules, --add-modules
default as per JEP 261
32
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4: Options
“Is modular”
Edit: enter the rabbit hole
Contents
what you ask for
what you get
--limit-modules, --add-modules
default as per JEP 261
Details
--add-exports
--add-reads (rarely needed)
--patch-module (careful!)
33
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4: Options
“Is modular”
Edit: enter the rabbit hole
Contents
what you ask for
what you get
--limit-modules, --add-modules
default as per JEP 261
Details
--add-exports
--add-reads (rarely needed)
--patch-module (careful!)
Power switch
34
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4: Options
Build vs. Run
UI should be sufcient for building
●
No need to learn cryptic CLI
Sufcient information for running?
Show Command Line
New in 2018-09
35
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4: Options
Build vs. Run
UI should be sufcient for building
●
No need to learn cryptic CLI
Sufcient information for running?
Show Command Line
New in 2018-09
Override Dependencies
New in Photon
36
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Act 4: Options
Build vs. Run
UI should be sufcient for building
●
No need to learn cryptic CLI
Sufcient information for running?
Show Command Line
New in 2018-09
Override Dependencies
New in Photon
More UI
… work in progress ...
37
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Epilogue
Act 4: Modifying Encapsulation?
“Gradual Encapsulation” [Herrmann 2008]
●
is encapsulation your friend or foe?
●
enforce encapsulation?
●
rules entail exceptions
Act 3: Isolation?
Separate namespace per module?
●
partly achieved / emulated
●
several opportunities missed
Act 2: Compatibility?
Java 9 is disruptive
●
against frameworks and applications
●
against tools
38
J
D
T
Stephan Herrmann @Eclipse Day India 2018 – published under the EPL
Epilogue
Act 4: Modifying Encapsulation?
“Gradual Encapsulation” [Herrmann 2008]
●
is encapsulation your friend or foe?
●
enforce encapsulation?
●
rules entail exceptions
Act 3: Isolation?
Separate namespace per module?
●
partly achieved / emulated
●
several opportunities missed
Act 2: Compatibility?
Java 9 is disruptive
●
against frameworks and applications
●
against tools
@NonNullByDefault
module org.eclipse.mymodule {
…
}
@NonNullByDefault
module org.eclipse.mymodule {
…
}

Contenu connexe

Tendances

Refactoring a go project
Refactoring a go projectRefactoring a go project
Refactoring a go projectDan Tran
 
Golang presentaion-2018-07-26
Golang presentaion-2018-07-26Golang presentaion-2018-07-26
Golang presentaion-2018-07-26Shintaro Ikeda
 
Android and OSGi Can They Work Together - BJ Hargrave & Neil Bartlett
Android and OSGi Can They Work Together - BJ Hargrave & Neil BartlettAndroid and OSGi Can They Work Together - BJ Hargrave & Neil Bartlett
Android and OSGi Can They Work Together - BJ Hargrave & Neil Bartlettmfrancis
 
Open-DO Update
Open-DO UpdateOpen-DO Update
Open-DO UpdateAdaCore
 
Hacking for Fun and Profit
Hacking for Fun and ProfitHacking for Fun and Profit
Hacking for Fun and ProfitApkudo
 
Hacking for Fun and Profit (Mostly for Fun). AnDevCon Boston
Hacking for Fun and Profit (Mostly for Fun). AnDevCon BostonHacking for Fun and Profit (Mostly for Fun). AnDevCon Boston
Hacking for Fun and Profit (Mostly for Fun). AnDevCon BostonApkudo
 
QVT Traceability: What does it really mean?
QVT Traceability: What does it really mean?QVT Traceability: What does it really mean?
QVT Traceability: What does it really mean?Edward Willink
 
Who Needs Thumbs? Reverse Engineering Scramble With Friends
Who Needs Thumbs? Reverse Engineering Scramble With FriendsWho Needs Thumbs? Reverse Engineering Scramble With Friends
Who Needs Thumbs? Reverse Engineering Scramble With FriendsApkudo
 

Tendances (10)

Refactoring a go project
Refactoring a go projectRefactoring a go project
Refactoring a go project
 
Golang presentaion-2018-07-26
Golang presentaion-2018-07-26Golang presentaion-2018-07-26
Golang presentaion-2018-07-26
 
Android and OSGi Can They Work Together - BJ Hargrave & Neil Bartlett
Android and OSGi Can They Work Together - BJ Hargrave & Neil BartlettAndroid and OSGi Can They Work Together - BJ Hargrave & Neil Bartlett
Android and OSGi Can They Work Together - BJ Hargrave & Neil Bartlett
 
Open-DO Update
Open-DO UpdateOpen-DO Update
Open-DO Update
 
Android NDK Overview
Android NDK OverviewAndroid NDK Overview
Android NDK Overview
 
Hacking for Fun and Profit
Hacking for Fun and ProfitHacking for Fun and Profit
Hacking for Fun and Profit
 
Hacking for Fun and Profit (Mostly for Fun). AnDevCon Boston
Hacking for Fun and Profit (Mostly for Fun). AnDevCon BostonHacking for Fun and Profit (Mostly for Fun). AnDevCon Boston
Hacking for Fun and Profit (Mostly for Fun). AnDevCon Boston
 
QVT Traceability: What does it really mean?
QVT Traceability: What does it really mean?QVT Traceability: What does it really mean?
QVT Traceability: What does it really mean?
 
Who Needs Thumbs? Reverse Engineering Scramble With Friends
Who Needs Thumbs? Reverse Engineering Scramble With FriendsWho Needs Thumbs? Reverse Engineering Scramble With Friends
Who Needs Thumbs? Reverse Engineering Scramble With Friends
 
D8 Dexer
D8 Dexer D8 Dexer
D8 Dexer
 

Similaire à Supporting Java™ 9 in Eclipse - A critical perspective - Stephan Herrmann

Building android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
Building  android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...Building  android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
Building android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...Hammad Tariq
 
From shipping rpms to helm charts - Lessons learned and best practices
From shipping rpms to helm charts - Lessons learned and best practicesFrom shipping rpms to helm charts - Lessons learned and best practices
From shipping rpms to helm charts - Lessons learned and best practicesAnkush Chadha, MBA, MS
 
Skaffold - faster development on K8S
Skaffold - faster development on K8SSkaffold - faster development on K8S
Skaffold - faster development on K8SHuynh Thai Bao
 
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023Prasta Maha
 
Pkg-config support for Eclipse CDT documentation
Pkg-config support for Eclipse CDT documentationPkg-config support for Eclipse CDT documentation
Pkg-config support for Eclipse CDT documentationTuononenP
 
Puppet Camp Germany 2020 - Puppet Control Repo and GIT
Puppet Camp Germany 2020 - Puppet Control Repo and GITPuppet Camp Germany 2020 - Puppet Control Repo and GIT
Puppet Camp Germany 2020 - Puppet Control Repo and GITMartin Alfke
 
How to build a tool for operating Flink on Kubernetes
How to build a tool for operating Flink on KubernetesHow to build a tool for operating Flink on Kubernetes
How to build a tool for operating Flink on KubernetesAndreaMedeghini
 
Introduction to angular 2
Introduction to angular 2Introduction to angular 2
Introduction to angular 2Dor Moshe
 
Going native with less coupling: Dependency Injection in C++
Going native with less coupling: Dependency Injection in C++Going native with less coupling: Dependency Injection in C++
Going native with less coupling: Dependency Injection in C++Daniele Pallastrelli
 
Versioning in Pipeline Pilot - Pipeline Pilot Forum 2018
Versioning in Pipeline Pilot - Pipeline Pilot Forum 2018Versioning in Pipeline Pilot - Pipeline Pilot Forum 2018
Versioning in Pipeline Pilot - Pipeline Pilot Forum 2018Peter Schmidtke
 
Elastic network of things with mqtt and micro python
Elastic network of things with mqtt and micro pythonElastic network of things with mqtt and micro python
Elastic network of things with mqtt and micro pythonWei Lin
 
generate IP CORES
generate IP CORESgenerate IP CORES
generate IP CORESguest296013
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIYoni Davidson
 
Microsoft kafka load imbalance
Microsoft   kafka load imbalanceMicrosoft   kafka load imbalance
Microsoft kafka load imbalanceNitin Kumar
 
Prometheus as exposition format for eBPF programs running on Kubernetes
Prometheus as exposition format for eBPF programs running on KubernetesPrometheus as exposition format for eBPF programs running on Kubernetes
Prometheus as exposition format for eBPF programs running on KubernetesLeonardo Di Donato
 

Similaire à Supporting Java™ 9 in Eclipse - A critical perspective - Stephan Herrmann (20)

Building android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
Building  android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...Building  android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
Building android apps with MVP, Dagger, Retrofit, Gson, JSON, Kotlin Data Cl...
 
From shipping rpms to helm charts - Lessons learned and best practices
From shipping rpms to helm charts - Lessons learned and best practicesFrom shipping rpms to helm charts - Lessons learned and best practices
From shipping rpms to helm charts - Lessons learned and best practices
 
Skaffold - faster development on K8S
Skaffold - faster development on K8SSkaffold - faster development on K8S
Skaffold - faster development on K8S
 
CDI 2.0 is coming
CDI 2.0 is comingCDI 2.0 is coming
CDI 2.0 is coming
 
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
Kubernetes & Cloud Native Indonesia X BukaMeetup - Feb 2023
 
I cant-believe-its-still-here
I cant-believe-its-still-hereI cant-believe-its-still-here
I cant-believe-its-still-here
 
Pkg-config support for Eclipse CDT documentation
Pkg-config support for Eclipse CDT documentationPkg-config support for Eclipse CDT documentation
Pkg-config support for Eclipse CDT documentation
 
Puppet Camp Germany 2020 - Puppet Control Repo and GIT
Puppet Camp Germany 2020 - Puppet Control Repo and GITPuppet Camp Germany 2020 - Puppet Control Repo and GIT
Puppet Camp Germany 2020 - Puppet Control Repo and GIT
 
How to build a tool for operating Flink on Kubernetes
How to build a tool for operating Flink on KubernetesHow to build a tool for operating Flink on Kubernetes
How to build a tool for operating Flink on Kubernetes
 
Introduction to angular 2
Introduction to angular 2Introduction to angular 2
Introduction to angular 2
 
Going native with less coupling: Dependency Injection in C++
Going native with less coupling: Dependency Injection in C++Going native with less coupling: Dependency Injection in C++
Going native with less coupling: Dependency Injection in C++
 
Versioning in Pipeline Pilot - Pipeline Pilot Forum 2018
Versioning in Pipeline Pilot - Pipeline Pilot Forum 2018Versioning in Pipeline Pilot - Pipeline Pilot Forum 2018
Versioning in Pipeline Pilot - Pipeline Pilot Forum 2018
 
Elastic network of things with mqtt and micro python
Elastic network of things with mqtt and micro pythonElastic network of things with mqtt and micro python
Elastic network of things with mqtt and micro python
 
generate IP CORES
generate IP CORESgenerate IP CORES
generate IP CORES
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-API
 
Ionic 2 - O que mudou?
Ionic 2 - O que mudou?Ionic 2 - O que mudou?
Ionic 2 - O que mudou?
 
Rogue bundles
Rogue bundlesRogue bundles
Rogue bundles
 
Microsoft kafka load imbalance
Microsoft   kafka load imbalanceMicrosoft   kafka load imbalance
Microsoft kafka load imbalance
 
Prometheus as exposition format for eBPF programs running on Kubernetes
Prometheus as exposition format for eBPF programs running on KubernetesPrometheus as exposition format for eBPF programs running on Kubernetes
Prometheus as exposition format for eBPF programs running on Kubernetes
 
Survey_Paper
Survey_PaperSurvey_Paper
Survey_Paper
 

Plus de Eclipse Day India

Java Performance Testing for Everyone - Shelley Lambert
Java Performance Testing for Everyone - Shelley LambertJava Performance Testing for Everyone - Shelley Lambert
Java Performance Testing for Everyone - Shelley LambertEclipse Day India
 
Eclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
Eclipse IDE Tips and Tricks - Lakshmi Priya ShanmugamEclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
Eclipse IDE Tips and Tricks - Lakshmi Priya ShanmugamEclipse Day India
 
Pattern Matching in Java - Srikanth Sankaran
Pattern Matching in Java - Srikanth SankaranPattern Matching in Java - Srikanth Sankaran
Pattern Matching in Java - Srikanth SankaranEclipse Day India
 
Machine Learning for Java Developers - Nasser Ebrahim
Machine Learning for Java Developers - Nasser EbrahimMachine Learning for Java Developers - Nasser Ebrahim
Machine Learning for Java Developers - Nasser EbrahimEclipse Day India
 
Scaling Eclipse on HiDPI Monitors - Niraj Modi
Scaling Eclipse on HiDPI Monitors - Niraj ModiScaling Eclipse on HiDPI Monitors - Niraj Modi
Scaling Eclipse on HiDPI Monitors - Niraj ModiEclipse Day India
 
Please Behave Yourself: BDD and automating Eclipse RCP applications using JBe...
Please Behave Yourself: BDD and automating Eclipse RCP applications using JBe...Please Behave Yourself: BDD and automating Eclipse RCP applications using JBe...
Please Behave Yourself: BDD and automating Eclipse RCP applications using JBe...Eclipse Day India
 
Eclipse Day India 2015 - Rest with Java (jax rs) and jersey
Eclipse Day India 2015 - Rest with Java (jax rs) and jerseyEclipse Day India 2015 - Rest with Java (jax rs) and jersey
Eclipse Day India 2015 - Rest with Java (jax rs) and jerseyEclipse Day India
 
Eclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JITEclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JITEclipse Day India
 
Eclipse Day India 2015 - Java 8 Overview
Eclipse Day India 2015 - Java 8 OverviewEclipse Day India 2015 - Java 8 Overview
Eclipse Day India 2015 - Java 8 OverviewEclipse Day India
 
Eclipse Day India 2015 - Java 9
Eclipse Day India 2015 - Java 9Eclipse Day India 2015 - Java 9
Eclipse Day India 2015 - Java 9Eclipse Day India
 
Eclipse Day India 2015 - Keynote - Stephan Herrmann
Eclipse Day India 2015 - Keynote - Stephan HerrmannEclipse Day India 2015 - Keynote - Stephan Herrmann
Eclipse Day India 2015 - Keynote - Stephan HerrmannEclipse Day India
 
Eclipse Day India 2015 - Eclipse RCP testing using Jubula based automation
Eclipse Day India 2015 - Eclipse RCP testing using Jubula based automationEclipse Day India 2015 - Eclipse RCP testing using Jubula based automation
Eclipse Day India 2015 - Eclipse RCP testing using Jubula based automationEclipse Day India
 
Eclipse Day India 2015 - Oomph
Eclipse Day India 2015 - OomphEclipse Day India 2015 - Oomph
Eclipse Day India 2015 - OomphEclipse Day India
 
Eclipse Day India 2015 - Keynote (Mike Milinkovich)
Eclipse Day India 2015 - Keynote (Mike Milinkovich)Eclipse Day India 2015 - Keynote (Mike Milinkovich)
Eclipse Day India 2015 - Keynote (Mike Milinkovich)Eclipse Day India
 
Eclipse Day India 2015 - Unleashing the Java 8 Tooling in Eclipse
Eclipse Day India 2015 - Unleashing the Java 8 Tooling in EclipseEclipse Day India 2015 - Unleashing the Java 8 Tooling in Eclipse
Eclipse Day India 2015 - Unleashing the Java 8 Tooling in EclipseEclipse Day India
 

Plus de Eclipse Day India (20)

Java Performance Testing for Everyone - Shelley Lambert
Java Performance Testing for Everyone - Shelley LambertJava Performance Testing for Everyone - Shelley Lambert
Java Performance Testing for Everyone - Shelley Lambert
 
Eclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
Eclipse IDE Tips and Tricks - Lakshmi Priya ShanmugamEclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
Eclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
 
Pattern Matching in Java - Srikanth Sankaran
Pattern Matching in Java - Srikanth SankaranPattern Matching in Java - Srikanth Sankaran
Pattern Matching in Java - Srikanth Sankaran
 
Machine Learning for Java Developers - Nasser Ebrahim
Machine Learning for Java Developers - Nasser EbrahimMachine Learning for Java Developers - Nasser Ebrahim
Machine Learning for Java Developers - Nasser Ebrahim
 
Scaling Eclipse on HiDPI Monitors - Niraj Modi
Scaling Eclipse on HiDPI Monitors - Niraj ModiScaling Eclipse on HiDPI Monitors - Niraj Modi
Scaling Eclipse on HiDPI Monitors - Niraj Modi
 
Please Behave Yourself: BDD and automating Eclipse RCP applications using JBe...
Please Behave Yourself: BDD and automating Eclipse RCP applications using JBe...Please Behave Yourself: BDD and automating Eclipse RCP applications using JBe...
Please Behave Yourself: BDD and automating Eclipse RCP applications using JBe...
 
Eclipse Day India 2015 - Rest with Java (jax rs) and jersey
Eclipse Day India 2015 - Rest with Java (jax rs) and jerseyEclipse Day India 2015 - Rest with Java (jax rs) and jersey
Eclipse Day India 2015 - Rest with Java (jax rs) and jersey
 
Eclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JITEclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JIT
 
Eclipse Day India 2015 - Java 8 Overview
Eclipse Day India 2015 - Java 8 OverviewEclipse Day India 2015 - Java 8 Overview
Eclipse Day India 2015 - Java 8 Overview
 
Eclipse Day India 2015 - Java 9
Eclipse Day India 2015 - Java 9Eclipse Day India 2015 - Java 9
Eclipse Day India 2015 - Java 9
 
Eclipse Day India 2015 - Keynote - Stephan Herrmann
Eclipse Day India 2015 - Keynote - Stephan HerrmannEclipse Day India 2015 - Keynote - Stephan Herrmann
Eclipse Day India 2015 - Keynote - Stephan Herrmann
 
Eclipse Day India 2015 - Eclipse RCP testing using Jubula based automation
Eclipse Day India 2015 - Eclipse RCP testing using Jubula based automationEclipse Day India 2015 - Eclipse RCP testing using Jubula based automation
Eclipse Day India 2015 - Eclipse RCP testing using Jubula based automation
 
Eclipse Day India 2015 - Oomph
Eclipse Day India 2015 - OomphEclipse Day India 2015 - Oomph
Eclipse Day India 2015 - Oomph
 
Eclipse Day India 2015 - Keynote (Mike Milinkovich)
Eclipse Day India 2015 - Keynote (Mike Milinkovich)Eclipse Day India 2015 - Keynote (Mike Milinkovich)
Eclipse Day India 2015 - Keynote (Mike Milinkovich)
 
Eclipse Day India 2015 - Unleashing the Java 8 Tooling in Eclipse
Eclipse Day India 2015 - Unleashing the Java 8 Tooling in EclipseEclipse Day India 2015 - Unleashing the Java 8 Tooling in Eclipse
Eclipse Day India 2015 - Unleashing the Java 8 Tooling in Eclipse
 
IDS and Bluemix
IDS and BluemixIDS and Bluemix
IDS and Bluemix
 
SWT - Technical Deep Dive
SWT - Technical Deep DiveSWT - Technical Deep Dive
SWT - Technical Deep Dive
 
PDE builds or Maven
PDE builds or MavenPDE builds or Maven
PDE builds or Maven
 
Orion - IDE on the cloud
Orion - IDE on the cloudOrion - IDE on the cloud
Orion - IDE on the cloud
 
KlighD
KlighDKlighD
KlighD
 

Dernier

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 

Dernier (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 

Supporting Java™ 9 in Eclipse - A critical perspective - Stephan Herrmann

  • 1. Stephan Herrmann Supporting Java™ 9 in Eclipse — A critical perspective J D T Simply Retail.
  • 2. 2 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Supporting Java™ 9 in Eclipse A Play in 4 Acts
  • 3. 3 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 1 What is Jigsaw all about? That's simple and easy!That's simple and easy!
  • 4. 4 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Simple: Module Syntax vs. OSGi Manifest module org.m1 { … requires org.m2; requires transitive org.m3; exports org.pack1; exports org.pack2 to org.m2; provides org.Ifc with org.Impl; uses org.Ifc; Bundle-SymbolicName: org.m1 Require-Bundle: org.m2 org.m3;visibility:=reexport Export-Package: org.pack1 org.pack2;x-friends=”org.m2” service.xml module-info.java MANIFEST.MF <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="IMyService"> <implementation class="org.Impl"/> <service> <provide interface="org.Ifc"/> </service> </scr:component>
  • 5. 5 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 1: That's simple and easy! DEMO: Modules in Eclipse
  • 6. 6 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 2 A closer look at module-info – from a tool smith's perspective Expect a slight sense of surprise Expect a slight sense of surprise
  • 7. 8 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 2: Something's weird JDT API (1): org.eclipse.jdt.core.ToolFactory.createScanner(..) org.eclipse.jdt.core.compiler.IScanner ● void resetTo(int startPosition, int endPosition) ● int getNextToken() org.eclipse.jdt.core.compiler.ITerminalSymbols.TokenNameIdentifer In Java 9 this API is beyond repair restricted keywords: ● “keywords that are keywords when they are keywords, else identifers” [my words] ● classifcation keyword / identifer happens after parsing should we remove this API (and break all clients of JDT)? just hope that nobody will use it for module-info.java?
  • 8. 9 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 2: Something's weird JDT API (1): org.eclipse.jdt.core.ToolFactory.createScanner(..) org.eclipse.jdt.core.compiler.IScanner ● void resetTo(int startPosition, int endPosition) ● int getNextToken() org.eclipse.jdt.core.compiler.ITerminalSymbols.TokenNameIdentifer In Java 9 this API is beyond repair restricted keywords: ● “keywords that are keywords when they are keywords, else identifers” [my words] ● classifcation keyword / identifer happens after parsing should we remove this API (and break all clients of JDT)? just hope that nobody will use it for module-info.java? import to.uses; import to.module; import to.to; module module { requires requires; exports to to exports; uses module; provides uses with to; requires transitive transitive; } import to.uses; import to.module; import to.to; module module { requires requires; exports to to exports; uses module; provides uses with to; requires transitive transitive; }
  • 9. 11 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 2: Something's weird Updating Tools Java™ 8 Java→ ™ 9 cannot be done in a compatible way
  • 10. 12 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3 There is complexity — Questions: What is the meaning of a.b.C1? Is the reference a.b.C1 legal? Does Java 9 support split packages?
  • 11. 14 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: Concepts How we want to see the world: Module 1 package a C1 C2C0 package a.b C1 C3 Module 2 package a.c C1 C2 package a.b C1 C4 requires
  • 12. 15 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: Realization This is the world according to JLS: Module 1 Module 2 C1 CU1 C0 associated with CU2 C2 package a declares package bis member within CU1 C1 CU1 C1 package c CU2 C2 requires exports
  • 13. 16 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: unnecessary complexity Containment module package class Independent packages among each other Module 1 package a C1 C2C0 package a.b C1 C3 Module 2 package a.c C1 C2 package a.b C1 C4 requires Emulation by indirect relations cu is associated to module cu declares package cu contains class Containment package sub-package Mod- ule 1 Mod- ule 2C1 C0 CU1 C2 CU2 package a package b C1 CU1 CU1 C1 package c C2 CU2 requires
  • 14. 17 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: Putting it to work Inside Module2, what does a.b.C1 mean? a.b.C1 is found in the CU1 associated with Module2 package a.b is uniquely visible from Module2 Module 1 Module 2 C1 CU1 C0CU2 C2 package a package b CU1 C1 CU1 C1 package c CU2 C2 requires package b ✔ ✔ package a
  • 15. 18 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: Putting it to work Inside Module2, what does a.b.C1 mean? package a.b is not uniquely visible, could be from Module1 or from Module2 this confguration is illegal Module 1 Module 2 C1 CU1 C0CU2 C2 package a package b CU1 C1 CU1 C1 package c CU2 C2 requires CUX X
  • 16. 19 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: Legal but broken Module 1 Module 2 C1 CU1 C0CU2 C2 package a package b CU1 C1 CU1 C1 package c CU2 C2 requires $ java -m Module2 Error occurred during initialization of boot layer java.lang.LayerInstantiationException: Package a.b in both module Module1 and module Module2 $ _ Need a Layer implementation that is capable of classloader-based isolation. Need a Layer implementation that is capable of classloader-based isolation.
  • 17. 20 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: Legal but asking for trouble API Leak API mentions a type, which the client cannot mention legal new complexity in the implementation put overloading and inheritance in the mix: infnite supply of new Java puzzlers Module 1 Module 2 C1 CU1 C0CU2 C2 package a package b CU1 C1 CU1 C1 package c CU2 C2 requires public void doSomething(a.b.C1 arg) { … }public void doSomething(a.b.C1 arg) { … }
  • 18. 21 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: Legal but asking for trouble API Leak API mentions a type, which the client cannot mention legal new complexity in the implementation put overloading and inheritance in the mix: infnite supply of new Java puzzlers Module 1 Module 2 C1 CU1 C0CU2 C2 package a package b CU1 C1 CU1 C1 package c CU2 C2 requires public void doSomething(a.b.C1 arg) { … }public void doSomething(a.b.C1 arg) { … } Missed Opportunity ● API leaks should be illegal ● Or method should be unmentionable for clients Missed Opportunity ● API leaks should be illegal ● Or method should be unmentionable for clients
  • 19. 22 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: summary encapsulation Split packages concealed: legal ● but no promise that the runtime can handle it ● need a capable Layer implementation merging a package (like fragment & host bundle) is illegal ● even if no class-level confict is involved API leaks JLS is silent compilers issue warnings ● TODO: better coordinate warnings between compilers
  • 20. 25 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 3: There is Complexity End of Act 3 A simple surface realized by complexity
  • 21. 26 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4 There's a lot more: command line options –illegal-access={permit,warn,debug,deny}
  • 22. 28 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4: Manipulating the Module Graph Things you can change via CLI options Add / remove / replace a module Add a “reads” edge (“requires”) Expose a package ● compile time (“exports”) ● runtime (“opens”) Merge a module from several sources ● patching ...
  • 23. 29 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4: Options Let's map command line options to UI
  • 24. 30 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4: Options “Is modular” Edit: enter the rabbit hole
  • 25. 31 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4: Options “Is modular” Edit: enter the rabbit hole Contents what you ask for what you get --limit-modules, --add-modules default as per JEP 261
  • 26. 32 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4: Options “Is modular” Edit: enter the rabbit hole Contents what you ask for what you get --limit-modules, --add-modules default as per JEP 261 Details --add-exports --add-reads (rarely needed) --patch-module (careful!)
  • 27. 33 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4: Options “Is modular” Edit: enter the rabbit hole Contents what you ask for what you get --limit-modules, --add-modules default as per JEP 261 Details --add-exports --add-reads (rarely needed) --patch-module (careful!) Power switch
  • 28. 34 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4: Options Build vs. Run UI should be sufcient for building ● No need to learn cryptic CLI Sufcient information for running? Show Command Line New in 2018-09
  • 29. 35 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4: Options Build vs. Run UI should be sufcient for building ● No need to learn cryptic CLI Sufcient information for running? Show Command Line New in 2018-09 Override Dependencies New in Photon
  • 30. 36 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Act 4: Options Build vs. Run UI should be sufcient for building ● No need to learn cryptic CLI Sufcient information for running? Show Command Line New in 2018-09 Override Dependencies New in Photon More UI … work in progress ...
  • 31. 37 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Epilogue Act 4: Modifying Encapsulation? “Gradual Encapsulation” [Herrmann 2008] ● is encapsulation your friend or foe? ● enforce encapsulation? ● rules entail exceptions Act 3: Isolation? Separate namespace per module? ● partly achieved / emulated ● several opportunities missed Act 2: Compatibility? Java 9 is disruptive ● against frameworks and applications ● against tools
  • 32. 38 J D T Stephan Herrmann @Eclipse Day India 2018 – published under the EPL Epilogue Act 4: Modifying Encapsulation? “Gradual Encapsulation” [Herrmann 2008] ● is encapsulation your friend or foe? ● enforce encapsulation? ● rules entail exceptions Act 3: Isolation? Separate namespace per module? ● partly achieved / emulated ● several opportunities missed Act 2: Compatibility? Java 9 is disruptive ● against frameworks and applications ● against tools @NonNullByDefault module org.eclipse.mymodule { … } @NonNullByDefault module org.eclipse.mymodule { … }