Hello,
This is to start a discussion around how OFBiz is being built and see
how to improve the current situation.
Some background:
We plan to use (pitch stage) OFBiz with a client in a cloud setup to
offer warehouse management functionality and more for an existing web
store. The end goal is to help multiple small businesses have an online
presence.
IMO the current OFBiz setup is not very well suited for cloud
deployments. It's quite large, has a lot of components that we don't
plan to use => are a maintenance burden, might (have) caused security
leaks. Some components could be split into another process and scaled
independently: email sending, pdf rendering, batch jobs etc.
Proposal:
I believe that we need to use gradle projects/subprojects and exposes
ofbiz components and plugins as concrete projects / jar libraries.
This is in contrast to how it's currently done where there is a single
gradle project that has subprojects created dynamically from ofbiz
components.
IMO, the benefits would be:
* Ability to publish components as jar libraries to consume in other
projects
* Increase reusability of components and hopefully - more third party
adoption. Ex: ofbiz entity engine could be used outside OFBiz and
improved at a different pace this way
* Modular design - where dependencies for each component/plugin are
visible and may evolve independently (this ties well with java modules)
* Ability for third party to create a custom OFBiz distribution based on
select components/plugins. These can be slim/specialized version of
OFBiz suitable for cloud deployment
* Proper gradle dependency management and explicit dependencies
https://issues.apache.org/jira/browse/OFBIZ-3500 (Think also IDE support
for component projects).
* ?!? I might have missed something.
What changes:
IMPORTANT: These changes will enable users to do more with OFBiz. They
will not change developer workflow that much.
* Create a build.gradle for each ofbiz component in ofbiz-framework and
later for plugins
* Depend on the gradle projects. This means using explicit include
'project-component' instead of dynamically adding them via
settings.gradle / activeComponents .
* Move java dependencies to each subproject
* We can still keep the option to include projects dynamically
* Apache OFBiz does not have to publish the jar libraries, but can offer
support for users to do that
Next steps:
* Provide code sample to build a light OFBIz framework
* Split some components into their own gradle module - to make them
optional: service engines seems like a good candidate (JavaScript, http,
etc)
I am willing to work on this with the community when we reach consensus.
I am not and OFBiz developer so I will need help pushing these upstream.
Related issues that would be easier to solve
* https://issues.apache.org/jira/browse/OFBIZ-12263
* https://issues.apache.org/jira/browse/OFBIZ-3500
* https://issues.apache.org/jira/browse/OFBIZ-9322
--
Eugen Stan
+40720 898 747 / netdava.com