Voy a hablar de las herramientas que considero imprescindibles para un desarrollador Java, en concreto para desarrollo J2EE. Puede que alguna se pueda obviar, como por ejemplo, Maven, pero la verdad es que yo no puedo vivir sin él. No incluyo en la lista la maquina virtual, es obvio que sin eso no puedes hacer nada:
Lo primero es un IDE. Yo uso el Eclipse, que es el mas extendido, es opensource y es el que mas plugins tiene. Yo aconsejo descargarlo desde este enlace. Es una aplicacion web que te permite crearte tu propio paquete de plugins y descargarlo todo en un zip. Es muy útil para trabajar en un proyecto en equipo, ya que puedes distribuir ese zip entre los programadores, y te ahorras tiempo instalando los plugins desde el propio IDE. Otras opciones son Netbeans de Oracle (antes de SUN) o el premiado Intellij IDEA. Este último es comercial, aunque tienen edición community.
<li>
<strong><a href="http://ant.apache.org">Apache Ant</a> o sucedáneos</strong>. Es una herramienta para realizar tareas, como puede ser compilar y empaquetar un proyecto, aunque puedes configurar todo tipo de tareas, como desplegar un war en un servidor de aplicaciones, o subirlo por ftp por ejemplo. Utiliza un lenguaje <span class="caps">XML</span> para definirlas en un fichero <strong>build.xml</strong> en la raíz del proyecto. Se integra muy bien en la mayoria de los IDEs. Existen en el mercado alternativas mejores que ant, como <a href="http://www.gradle.org/">Gradle</a> o <a href="http://buildr.apache.org/">buildr</a>, pero <strong>ant</strong> esta muy implantado y sigue siendo el que mas se usa.
</li>
<li>
<strong><a href="http://maven.apache.org">Apache Maven</a></strong>. Como ya he comentado, no puedo vivir sin maven. Es una herramienta de gestión de proyectos. Tiene infinidad de plugins. Su caracteristica mas útil, es que te descarga y añade a tu classpath las librerias que usa tu proyecto. Solo tienes que definirlas en un fichero xml. La mayoria de IDEs lo soportan. Para Eclipse, necesitas instalar <a href="http://m2eclipse.sonatype.org/">m2eclipse</a> de SonaType.
</li>
<li>
Un <strong>sistema de control de versiones</strong> no puede faltar, ni con java ni con cualquier otro lenguaje. El que mas he utilizado es <a href="http://subversion.tigris.org/">Subversion</a>. La mayoría tienen plugins para los IDEs mas conocidos.
</li>
<li>
<strong>Un editor de texto ligero con coloreado de sintáxis</strong>. Yo uso <a href="http://notepad-plus-plus.org/">Notepad++</a> o <a href="http://www.pspad.com/es/">PsPad</a> en windows. En linux uso el <a href="http://www.gedit.org">GEdit</a>.
</li>
<li>
<strong><a href="http://www.cygwin.com/">Cygwin</a></strong>. Es como un emulador de linux sobre windows. Siempre lo instalo cuando trabajo en windows porque no me gusta su terminal. Puedes instalar muchos programas de la linea de comandos de linux que puedes elegir en el instalador.
</li>
<li>
<strong><a href="http://www.putty.org/">Putty</a></strong>. Sirve para conectarse a un terminal remoto por <span class="caps">SSH</span> o telnet desde windows. Si estoy en linux, utilizo el comando ssh desde el terminal.
</li>
<li>
<strong>Un frontend para la base de datos</strong>. Dependera con cual este trabajando. Ahora mismo utilizo <a href="http://www.dbvis.com/">DbVisualizer</a>.
</li>
<li>
<strong>Navegador con depurador JavaScript</strong>. Estoy usando <a href="http://www.google.com/chrome/?hl=es">Chrome</a>, que viene con un depurador muy bueno. Antes usaba <a href="http://www.mozilla-europe.org/es/">Firefox</a> junto con el plugin <a href="http://getfirebug.com/">Firebug</a>.
</li>
<li>
<strong>Servidor de aplicaciones</strong>. Actualmente uso el <a href="http://www.glassfish.org">Glassfish</a>.
</li>
<li>
<strong>Bugtracker</strong>. Imprescindible para llevar un seguimiento de los bugs. Actualmente uso <a href="http://www.atlassian.com/software/jira/">Jira</a>, que es el mas extendido. Tambien he usado <a href="http://www.redmine.org/">Redmine</a>, <a href="http://trac.edgewall.org/">Trac</a> y <a href="http://www.bugzilla.org/">Bugzilla</a>. Uso un plugin para el eclipse, que me permite conectarme al bugtracker, ver los bugs disponibles y gestionarlos sin salirme del <span class="caps">IDE</span>.
</li>
<li>
<strong>Servidor de integración contínua</strong>. Uso <a href="http://jenkins-ci.org/">Jenkins</a> (hasta hace nada llamado Hudson). Sirve para programar los builds de los proyectos. Para configurar los “builds” lo habitual es conectarlo con el servidor de control de versiones. Puedes configurar que ejecute tareas de ant, ‘goals’ de maven por ejemplo o cualquier otro tipo de script.
</li>
<li>
<strong><a href="http://www.google.com">Google</a></strong>. Imprescindible, esto lo usamos todos los programadores, de cualquier lenguaje.
</li>
<li>
<strong>Una aplicación de notas</strong>. Yo uso <a href="http://www.evernote.com">Evernote</a>. Es un programa para crear notas y capturar páginas web o fragmentos de estas. Yo lo utilizo para almacenar artículos y tutoriales interesantes para futuras referencias, o fragmentos de código, todo clasificado por carpetas y etiquetas. Dispone de aplicación para Windows, Mac, Android e iOS que se sincroniza con la aplicación web .
</li>
<li>
<strong>Servicio de almacenamiento en la nube</strong>. Yo uso <a href="http://www.dropbox.com">Dropbox</a>. Lo utilizo para guardar documentos relacionados con Java, como manuales de referencia de diversas tecnologías y frameworks. Teniendolos en un sitio, ahorro tiempo a la hora de consultarlos.
</li>
<li>
<strong>Repositorios de código opensource</strong>. <a href="https://github.com/">Github</a>, <a href="http://code.google.com">google code</a> y <a href="http://sourceforge.net/">sourceforge</a>. Muchas veces busco código que me pueda ser de utilidad en el proyecto que estoy trabajando.
</li>
<li>
<strong>Papel y lápiz</strong>. A pesar de todos los avances tecnológicos, aún uso este primitivo modo de escritura, jeje.
</li><br />
Estas son las herramientas que yo considero imprescindibles, aunque puede haber más, dependiendo el proyecto en el que este trabajando.