ceylon module repositories by aleš justin
DESCRIPTION
Discover how Ceylon modules are implemented.TRANSCRIPT
Module repositoriesAleš Justin, Red Hat
Modules?• History • Java SDK monolith
• JSR-277, JSR-294, …
• OSGi !
• Should be part of the language! • Well, you cannot ignore legacy
• A ton of cool Java libs, … !
• It’s all about modules in Ceylon! • (at least that’s what Stéphane tells me ;-)
Compiling the app?
• Something needs to know how to *find* dependent modules • Typechecker “talks” to Ceylon Module Repository (CMR)
!
• Once an app module is compiled, it goes into local module repo → *ready* to be used by other modules !
• But how do we share it “globally”?
Running the app?
• Directly — MyApp::main(String… args) ? • BOOM!! … as nobody knows how to *load* dependent modules
!
• Custom “Runtime” • JBoss Modules based (WildFly AS proven; p2p classloading)
• “Talks” to CMR to lookup modules
• Lazy initialisation; build minimal transient closure of dependency info
More module lookups
• IDE • Sources, module list view and compiling
• JavaScript backend • Lookup .js files
Module lookup• <name,version> → module or <null> • No range lookup
• Set of repositories • Local
• Remote
• Type of repository • File system
• Maven
• WebDav
• Herd
• Remote → Local • Transferring module’ bytecode bits and *dependency info*
Dependency info
• Native • import org.acme.poke “1.0”
• Maven • From pom.xml / via Aether
• JBoss Modules • module.xml
• Custom jar • module.properties
• OSGi (wip)
Maven trouble?
• Some Maven pom.xml files are “invalid” • Transitive dependencies / flat classpath • 2nd level dep used directly
!
• Fix? • Current workaround = overrides.xml • Add
• Remove
• Replace
• Any better idea?
Repositories configuration
• Default • Distrib, Project, User, Cache, Herd, …
• Add your own • —rep <repo config>
• Customise things in .ceylon/config
Module sharing?
• Herd (http://modules.ceylon-lang.org/) • Upload your modules • Upload permission
• Dependency pre-check
• Integrity validation check
• Set-up your own Herd
!
• Query for modules • If supported by repository type
Misc
• CMR, Runtime, Typechecker, … are also all modules • Can be used in the app; but not encouraged
• Language and JDK are added by default • Yes, even JDK is a module (actually multiple modules)
• Logging module(s) have special treatment • So all logs end-up at the same place — JBoss LogManager
• CMR is pluggable — RepositoryBuilder • Impl your own Repository
Thanks! !
[email protected] Q&A anytime