How to share configuration in a team across MANY projects 关注
I am wondering if anyone out there is trying to manage Intellij configurations for a team across many projects. There are solutions out there they just don't go the distance.
Project Level Sharing
Intellij allows configurations to be stored at the project level which is great in some situations but not if each component in a project has it's own repository. I have more components than developers. So keeping the project level configs in sync is time-consuming and error-prone especially if we want to rely on intellij for inspections, jslint, etc.
The other problem with this is that I often find myself with multiple projects which incorporate different sub-set of modules for one project to cover different types of tasks. In my current project I have an 'all', 'framework', 'tooling', and 'support' project which all cover different subets of the project. I do this to help with performance problems but this also helps with task focus. other developers break it down differently.
config dir in Source Control
I have tried that before. It usually results in a mess of 3-way merges when IntelliJ makes huge re-writes in some of the config files and multiple users push files back to master after weeks of changes to their config files. It might be possible with a good .gitignore file to get close to sanity but I am still not convinced.
A long time ago IntelliJ had a free Configuration Server that did the basic job. It doesn't seem to exist anymore. In any case it was good for one developer syncing configs on multiple PCs but I don't remember it doing any really team sharing stuff.
Import Export Import
We could use the Import/Export feature and store that on a file-share or maybe in source control. This is probably the simplest solution. But it does require a lot of steps to propagate changes to the team. If source control is not used then there there is a lot of risk that the config gets polluted by whoever does the export. If source control is used then we are back to issues mentioned above with storing config in source control.
So What are We to Do?
- Maybe someone out there can tell me that they have had a better experience with one of the above than me.
- Maybe there is some other approach, plugin, tool out there that I have not heard of.
- What does Jetbrains do? They use Intellij to implement all of their stuff. They must have this problem.
- Should I think of a real solution to this problem. Maybe something that takes the form of a plugin.
A perfect Solution for me would look something like this
- A repo accesible through http that stores versioned config files and config sets. (online source-control, or an artifact repo, or something else)
- A plugin that can pull configurations from one or more repo.
- A way to define config-sets.
- tooling for pushing changes. Not sure about how this should work but it should be harder to push than to pull.
What do you think? Am I over thinking this?
I have given up on sharing ide configuration files among developers; most of the time this practice is even discouraged by the employer.
In any case, if you can use maven or gradle there's no need for doing this anymore: modern ides, inclusing Idea, have good support for these tools such as it is quite easy and fast to recreate your project from the pom for instance; even reassembling a multi-module project is no biggie, just import as a module the poms you need.
I know this setup doesn't answer more involved configuration issues such as application servers config but again these aren't the best candidates for sharing either.
Finally, an idea you might explore on that pertains rather to team devops for instance on sharing tomcat configurations: you might have a master setup of say a tomcat version and instances derived from templates to suit your webapp environment; all these instances are configured alike all you'd change would be environment variables in setenv that describe the separate http ports, jmx, debuging, logging etc; you can go any number of steps further and say create scripts for starting/stopping/restarting these instances so that the final goal is some sort of automatization that you can share across a team.
hope it helps, good luck,
I agree with you. As much as possible should be stored in project files and not in the IDE. But That works well for building and running the project.
I am talking more specifically about coding-time things like code formatting, templates, scopes, and inspections. Things like templates and scopes are even IntelliJ specific.
I see..There is indeed a related feature File > Export Settings that can act like templating for new projects; I don't know much about it as don't use that feature, and speaking for myself I'd be mindful of applying some shared styling and properties in my IDE. I have colleagues that are strict about using tabs characters in their eclipse project, another one that likes aligning the variables declarations, etc
That being said, I cannot see how changes to this can be shared easily (except for maybe starting a new idea project).