Open CeylonMigrationBot opened 11 years ago
[@FroMage] Didn't you fix this already?
[@FroMage] Ah no I guess not. Well, unless @alesj can fix this today we'll have to live without it.
[@alesj] Do you have a test to reproduce this?
[@alesj] javax.xml::7 -- this is Ceylon only notion. Before you get into CeylonModuleLoader you cannot know about this.
The way you solve this is to have so called "system" module, which exposes this package(s).
Let me check if we have something like that already.
[@alesj] This is what I'm taking about:
... which is already in CMR ...
[@FroMage] OK, so you're saying this issue is only for our modules, not for other modules loaded by ceylon code that will have module.xml
files?
[@quintesse]
@alesj It's a Ceylon-only notion, but we'd like it integrated somehow with the runtime. Otherwise we'll have two different systems: people can do import java.base "7"
in module.ceylon
files, but cannot do the same in module.xml
or module.properties
files.
The class com.redhat.ceylon.cmr.api.JDKUtils
has all the functions necessary to look up the packages belonging to a modules name like java.base
.
[@alesj] Runtime, CMR, etc also uses JBoss Modules to "assemble" itself -- but using only default JBoss Modules things, pretty much similar to Wildfly. Hence it only knows default module.xml stuff.
Whereas Ceylon modules are loaded by custom ModuleLoader, CeylonModuleLoader. Where the imports / dependencies come from doesn't matter; can be ceylon.import, module.xml, module.properties, etc Any Ceylon module will understand 'java.base 7'.
To have this before, you would have a chicken-n-egg problem. ;-)
[@alesj] @FroMage so, yes.
[@quintesse] Well the JDKUtils
are completely independent from Ceylon, so I don't see why the same way that we have our own module.properties
reader we couldn't have our own XML reader that just turns an import like java.base/7
into the appropriate ExportPath
invocations. (not saying we can do it now, it might take some time, but I don't see why it can't be done).
[@FroMage] OK, then fair enough, this is not so important if it only applies to our bootstrap modules.
[@FroMage] Though perhaps it messes things up for ceylon modules that import our bootstrap modules?
[@FroMage] As in, the Ceylon module that imports one of our bootstrap module, will look at its shared imports, and where it should see something like java.base/7
it will see what?
[@quintesse] No, it won't see those because we don't have them defined. That's why it's a less than ideal solution what we have now. Nothing really major I think, but not really correct either.
[@gavinking]
Though perhaps it messes things up for ceylon modules that import our bootstrap modules?
Like @lucaswerkmeister's stuff.
[@alesj] It shouldn't mess things up imo, as the class(loader) should be the same -- the system classloader.
[@FroMage] I mean, they won't see that the modules depend on JDK stuff, but this slips to 1.1 anyways.
[@alesj]
they won't see that the modules depend on JDK stuff
What do you mean by this?
[@quintesse]
What do you mean by this?
It means that if you ask for the module's dependencies "javax.xml/7" won't be part of it.
[@alesj] It depends who uses this module.xml. If it's JBoss Modules directly, then you need to use that system export feature -- see CMR' module.xml in Runtime. If it's Ceylon, then it should work, as the CeylonModuleLoader has those semi-hard coded.
[@FroMage] Moving to 1.2, unfortunately.
[@quintesse] Adding a dependency like:
to a
module.xml
file doesn't work, resulting in errors like:Also see discussion on #4732
[Migrated from ceylon/ceylon-runtime#46]