Our organization currently uses a sort-of hacked together form of Java dependency management, effectively relying on IDE configurations and then maintaining a repository of these configs that can be checked out. We have a hybrid of dependencies; some of them are .jars from third parties, whereas others are projects (in Eclipse parlance) or modules (in IntelliJ parlance) that are developed internally. We don't have a "customer" that we ship to nor do we have an Open Source community (we're a research lab) so we typically don't generate binaries of any of our work. Basically, all of our internal code is always working from source. This poses some problems, though:
- This doesn't translate to our CI server, which means we also have to maintain a repository of Ant scripts identifying source dependencies on the classpath so that Bamboo can figure out build properly. This is annoying.
- This method isn't cross-IDE; some of our devs prefer Eclipse while others prefer IntelliJ IDEA. If it'll make our developers more productive by letting them pick their environment of choice, we don't want to get in the way of that.
- This method in an of itself is pretty brittle; if somebody makes a new project, then we have to spend a bunch of time fiddling with Bamboo's Ant scripts and re-exporting our IDE configs.
I'd like to move our researchers towards a more Software-Engineer-y approach like automated build/dependency management that would allow for portability between IDE's as well as our CI setup, but it seems from my reading of the tutorials for Maven and Ivy (haven't spent much time looking at other tools yet) that the general idea is to define binary dependencies, with the option to pull down the sources in to your .m2 or .ivy2 as an extra, but not as the sole method of dependency management. Ideally, we would be able to use one of these tools as a way to handle both binary dependencies from Third Parties as well as our internal source dependencies by pointing to our internal version control. Is this possible with the existing tools or is there a tool that I'm not aware of that would allow for this?
Edit
Maybe a better way to state what I'm looking for is not just dependency management for the purpose of triggering a build, but also managing dependencies when initializing a fresh development environment. Check out project A, and your dependency manager checks out all of the relevant local sources and third party .jars; in Java, this isn't that far removed from building since most IDE's are effectively nice GUI's around classpath/dependency management with a fancy text editor thrown in so I didn't think the request was that farfetched, but I may have failed to think about it hard enough.