[ https://issues.apache.org/jira/browse/RIVER-300?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12988515#action_12988515 ]
Peter Firmstone commented on RIVER-300: --------------------------------------- Many classes in the existing build, belonging to the com.sun.jini.* namespace are duplicated in jar archives, these are implementation classes, the preferred class loading mechanism is used to ensure that the codebase copy / version is used by proxy's, not the classpath version of a class. Preferred class loading prevents the loading of jini implementation classes from the Classpath (application class loader) by proxy's or services in their own namespace (a child classloader). If we create a modular system, these implementation classes duplicated in many archives currently, will need to be separated into their own module, in order to allow them and the modules that depend on them, to evolve separately, since a proxy will need to be able to use the version it requires, while the platform can use another version. Preferred class loading, is the current mechanism that should be used to assist with version control, to ensure that proxy's load the correct implementation classes. This allows TaskManager and suchlike to evolve without concern for backward compatibility, and it allows services and proxy's to use their own version copies, in their own private name space. Preferred class loading is required to prevent the use of classes from the classpath (application class loader) In a modular system, the source code belongs in a particular module and is not duplicated, classes are also not duplicated. The class files that are currently duplicated belong in their own modules, on which the platform and other modules depend. This is at present, the only way to prevent us from having to support the duplicated implementation classes as part of the platform. Eventually I can see the potential to refactor using JDepend and dependency inversion, removing jini platform implementation classes from the classpath, instead loading them into a private namespace (child classloader), when this is done, preferred class loading will no longer be mandatory, as there is no danger of proxy's using the local class path version of these classes, since they won't be visible in the parent application classloader. > introduce maven to the river build process > ------------------------------------------ > > Key: RIVER-300 > URL: https://issues.apache.org/jira/browse/RIVER-300 > Project: River > Issue Type: Improvement > Components: build > Reporter: Jools Enticknap > Attachments: apache-river-gradle.zip, apache-river-maven.zip, > ldm.pdf, lld.pdf, persistOutrigger.pdf, river-modularization-overview.odt, > river-modularization-overview.pdf > > > Currently the river build using ant, but it's a custom build process and has > many hang overs from the original make build. > Given that the project has no 3rd party dependencies, it would be very easy > to break the code up into modules. > Please feel free to add to this JIRA if you have any opinions on how the > maven repository should be setup. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.