New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rework pom #708
rework pom #708
Conversation
It is not clear to me why you put a capital letter on each artifact's name? |
Most of those are answered by : you are making a multi module project. Yes, that means that whenever you push a new version, ALL children are also pushed to that new version, even if they did not have a change. But it also ensures they work together at any time, which is the goal of a multi module project. If you consider that some modules are not supposed to be packaged at the same time, then there is no point in putting them in the multi module. But then they may lag very far behind and you will have to make complex updates when you want to update them to the last version. This way, when you update Choco, people just need to change the choco-version variable in their pom to last version, and everything works. |
WRT Geost : if a module is no more maintained but may be maintained later, just remove it from its parent children. It remains in the git, can be added later on. |
WRT Upper and lower case first letter : it's to be sure the code you are using is in a packaged module and not a pom . But you are right that it's not necessary and should be kept for a major version change(so after some thoughts). It however makes the modules tree a lot less messy. |
So, in my opinion, there are some modifications you suggest that I should take into account and other I could.
I could do:
What is still not clear to me is
Do you have a pointer to this ? |
Frequency of updates is irrelevant. What is relevant is, if your modules adds "services" (not web services, more like abstract notion) in the scope of your global project. For example, a child module that adds constraints code is obviously in the present scope of Choco. A module that allows to use Choco in parallel on several servers is also in this scope. a module that makes comparison between choco and other solvers should not : it brings nothing to "solving problem in java using constraint programing". Modules that are basically example of how to use choco should be maintained. When they are no more maintained(member of team leave, usage deprecated, etc.), they should simply be removed from their parent list to not be updated, pushed, etc anymore. Such a remove shall trigger a major version update, so adding "external" submodules to the main project should not be done lightly. Unless you don't mind adding 10 major version every month ^^ . If you consider a project made by someone else is interesting, then you won't maintain it : so it should not be in the submodules of choco. Instead it should have its own project, so its own git, page, even though it can be placed in the groupid eg org.chocosolver.external . Let's say that I want to make several graph modeling tools in choco, but they use very specific heuristics and you have nobody to maintain it in the team because their use case is so specific. Then you don't add it in the multi module, I need to make my own project, and you advice me to add it in the org.chocosolver.external.glelouet package. Then later on I simplify and generalize it enough, then you can maintain it and will just copy the files from the git , just updating its groupid to eg org.chocosolver.solver.contraints, ensuring that it will always be updated along all Choco files. |
Yes for unicity, no for parent pom.xml . ALL children must have their own version specified, which MUST be the same as their parent. The maven versions:set -DnewVersion=1.0.0 will automatically update them all as long as they are recursively referenced from their parent. You can also resolve it to a property and pass the actual value by command eg See this guys for more and interesting details : I did not check more than that, so my guess is things should be better by now - I just don't know it. In the end I just use the mvn versions:set and it's the simpler for me (mvn release works fine too but if creates tags on the distant git even when it fails, leading to potential issues when the mvn process does several compilation for eg dynamic classes which result in being pushed in the git and treated as new files by the classloader and fail at reusing them. It make a big mess sometimes, when you are using dynamic class generation) |
Consider a child that is stable (no bug, no features), what is the point to keep it in an active big project ? |
The correct term is : yes remove it from dependencies, and also remove it from its parent as a child. Don't remove the code, or if you do move it to eg a deprecated submodule example of modules hierarchy :
|
How do you prove there is no bug ? How do you ensure there won't ever be a need for feature that should go into that project ? The point of keeping it in an active project is to ensure it will be updated as soon as anything it relies on is updated,so you will have errors eg if updating a version of your logger. Yes, if a user of such a project tries to always be up-to-date, he may be told that a major version was pushed while actually no diff was present in the project he uses. But he can always try to update and revert if needed. But of course, maybe it will never be moved again. But then maybe the project should be moved outside of the multimodule project. |
Welcome to our great project! |
Just a few changes on the poms.
Still bugged as the geost ? project requires choco-solver 10.0.5 and … well it can't compile.
Anyhow not supposed to be accepted, just an example.