Skip to end of metadata
Go to start of metadata

Workspaces and Universal Source Directory

Jason originally proposed the concept of a "universal source directory" - a layout known to Maven that would allow Maven and plugins to find checkout source code in a uniform way, so that if you work in that particular layout, you can more effeciently work across projects.

We have started to implement some a minor feature of this:

  • discovery of parent project in ../pom.xml, or as specified by relativePath if it exists

I would like to generalise that, to a "workspace definition". The default workspace will match the originally proposed universal source directory.


  • A workspace will be a per user setting, generally not checked in to SCM
  • Workspaces will point the location of a POM for a given project
  • Workspaces must support multiple versions of a project, ie branches and tags.
  • Some workspace information will be stored in the POM to facilitate sharing (eg, relativePath)
  • Workspaces will have a configurable base directory, but relative paths, facilitating sharing.
  • Multiple workspaces can be used at once and are aggregated.
  • Workspaces can include other workspaces for decomposition.
  • Workspaces will be available to plugins - eg so that the IDEA plugin can generate a sensible .iws file, the eclipse plugin can create a whole workspace directory with .settings
  • Workspaces will be rewritable by plugins - generally this would just be for the SCM plugin so that when you checkout a project it can add it to a workspace
  • Workspaces should identify a POM as well as path so that if the local project isn't present, under a certain mode it can checkout the project into that location for fast setup from a workspace file

This will aid a lot in overcoming issues we have with SVN: instead of checking out from one location to get everything, you let the workspace file pick out the pieces you need and lay it out in the expected way. Multiple workspaces could configure the same sources in different ways (eg to flip to a development version of X).

  • No labels