Source Control Management (SCM)
At the moment, we are several people that works with Subversion or Git, both useful but perhaps one more popular than other.
Using whatever, we can share our code with all the team, and we can work together. Also, is not necessary send files by email, because SCM is charge off the keep the last code, and if we make a mistake in the last code we can see all the historical code.
Mercurial and CVS are also SCM.
If we going to start with collaborative project and share our code, we can use Google Code or Github. I think that, both are goods products.
Is a java tool. If we use maven we can manage our project's life cycle. we can use some commands for compile the code, create the artifact (jar, ear, war), run our test, upload the artifact to repository.
Besides, maven allow us run embedded server such as tomcat, jetty.
Using maven, we can forget about search jars and their dependencies. Maven download the jar that we want to use and their dependencies too. That's awesome.
Currently, we are working with maven projects. But, if we are big group and we are working in the same project. We can use Nexus Repository.
Using that, we are allowed to create local repository for our projects and upload our artifacts (jar, ear, war). We can also create proxies repositories, i.e. for our project we need to use jboss libraries, but in the Central Repository we can't find this jar. We can add another repository, in this case: https://repository.jboss.org/
Here, others repositories:
Tool charge of keep measure about projects. Identify duplicate code, measure your code, measure complexity cyclomatic, identify bad practices and recommend how to solve. The last depend on the rule configured.
In the following URL http://nemo.sonarsource.org/ , you can see several open source projects.
Hudson or Jenkins
Is the most popular Continuous Integration (CI) server. Here, we can works with all tools that we have mentioned in this blog. We can download the maven project from the SCM and this will charge of looking for dependencies on Nexus Repository and update the last measures on Sonar server.
We can automate several functions. CI server use jobs, could have one job for deploy on production environment, other for update measure on Sonar, the last maybe analyze our code each 1 hour.
We can have this tools in our environment, but you shouldn't forget that we need practices and polices, in order to have a good control over the team and the projects.