Managing Multiple Dependencies

From CitconWiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Ivy

  • Ant/Java based dependency management tool
  • Flexible back end artifact repository

Maven

  • Large build/dependency/project managment tool
  • Does much more than dependency management, which can make it overkill if that's all you want

Fig

  • Can be found on github
  • Small tool for managing dependencies
  • Able to manage classpath, library path, etc for executable being managed
  • Matt Foemmel (original co-author of Continuous Integration paper)/Chris Read

Gradle

  • Build tool
  • Build in dependency management (uses Ivy internally)

Versioning/Configuration management

  • Have a good policy of how to introduce api changes
  • Dependencies should always compile against you
  • Chris: there doesn't seem to be any tool that can automatically prevent api breaking changes

Tom D question:

  • Module A has some production code, as well as some unit tests, integration tests and scenario tests.
  • If there are some useful *testing* utilities, should they be packaged for use externally
  • Chris R: generally OK, Consider the test code as a different target environment (e.g. prod vs test)

Is this a design smell?

  • module B depends on test code from module A, therefore get module A to publish separate test utility artifact
  • comment: break out the test utility into its own module
  • however, this will cause a cyclic dependency between B and A test utils

Question:

  • How to express dependencies of modules with different languages/artefact types?
  • Dependency information should be independent of any specific CI system
  • Ivy or Fig look like good candidates for these problems