Hace tiempo escribi un minitutorial acerca de como configurar Geany para programar en java, ahora mostraré una forma mas facil de programar en Java con Geany y Ant. Esto lo he probado satisfactoriamente en Linux Mint y en Manjaro, no esta por demas decir que debe estar instalado el JDK en el sistema.
1. Primero instalamos Apache Ant, lo podemos encontrar en los repositorios de ambas distribuciones.
2. Creamos un proyecto en Geany y lo renombramos como queramos. Para crear un proyecto en Geany vamos a Proyecto -> Nuevo.
3. Creamos dentro del proyecto dos directorios uno para el codigo fuente llamado «src» y el otro para las librerias que usara la aplicacion con el nombre «libs».
4. Ahora creamos el archivo build.xml que será el que nos ayude a hacer las operaciones de compilar, ejecutar y construir el archivo jar. En mi caso lo construi de la siguiente manera:
<?xml version="1.0"?>
<!-- La accion por defecto es ejecutar-->
<project name="CreaSnippets" default="ejecutar" basedir=".">
<!-- =============================================== -->
<!-- Accion inicializar ================ -->
<!-- =============================================== -->
<target name="inicializar" description="Inicializar variables">
<echo message="Inicializando" />
<!-- Ruta del directorio con los ficheros fuente que queremos compilar (*.java) -->
<property name="fuente" value="src" />
<!-- Ruta del directorio donde queremos que deje los ficheros compilados (*.class) -->
<property name="destino" value="class" />
<!--Para usar las librerias desde compilar y ejecutar-->
<path id="librerias">
<fileset dir="libs" includes="**/*.jar"/>
</path>
<!--Para el manifest en el jar-->
<pathconvert property="libs" pathsep=" " refid="librerias">
<mapper>
<chainedmapper>
<flattenmapper/>
<globmapper from="*.jar" to="libs/*.jar"/>
</chainedmapper>
</mapper>
</pathconvert>
</target>
<!-- =============================================== -->
<!-- Accion limpiar ================ -->
<!-- =============================================== -->
<target name="limpiar" description="Borrar archivos temporales">
<echo message="Limpiando el proyecto" />
<delete dir="class"/>
</target>
<!-- =============================================== -->
<!-- Accion borrar ================ -->
<!-- =============================================== -->
<target name="borrar" description="Borrar archivos temporales">
<echo message="Borrar archivo jar" />
<delete file="Main.jar" />
</target>
<!-- =============================================== -->
<!-- Accion compilar (comando javac) =============== -->
<!-- =============================================== -->
<target name="compilar" depends="inicializar">
<echo message="Creando el directorio class" />
<mkdir dir="class"/>
<!--Copiando archivos no .java al directorio class-->
<copy todir="${destino}">
<fileset dir="${fuente}">
<include name="**/*.gif"/>
<include name="**/*.jpg"/>
<include name="**/*.png"/>
<include name="**/*.properties"/>
<include name="**/*.xml"/>
<include name="**/*.sql"/>
</fileset>
</copy>
<echo message="Compilando el codigo" />
<javac srcdir="${fuente}" destdir="${destino}" includeAntRuntime="false">
<classpath refid="librerias"></classpath>
</javac>
</target>
<!-- =============================================== -->
<!-- Accion ejecutar (comando java) ================ -->
<!-- =============================================== -->
<target name="ejecutar" depends="compilar">
<echo message="Ejecutando el archivo " />
<java classname="vista/Main" fork="true">
<classpath>
<pathelement path="${destino}"/>
<path refid="librerias"></path>
</classpath>
<!-- Descomentar si queremos pasar un argumento -->
<!-- <arg value="primer argumento" /> !-->
</java>
</target>
<!-- =============================================== -->
<!-- Accion construir (comando jar) ================ -->
<!-- =============================================== -->
<target name="construir" depends="compilar,borrar" >
<jar destfile="Main.jar">
<!--** Para incluir todos los elementos de la carpeta destino-->
<fileset dir="${destino}" includes="**"></fileset>
<!--Lo que se incluira en el archivo de manifiesto-->
<manifest>
<attribute name="Main-Class" value="vista/Main"/>
<attribute name="Class-Path" value="${libs}"/>
</manifest>
</jar>
</target>
</project>
Este archivo debe ir en el directorio base del proyecto, el cual nos deberia quedar de la siguiente manera:
5. Finalmente debemos editar los comandos en Geany para Compilar, Ejecutar y Construir el jar. Nos deberia quedar de la siguiente manera:
Hay que tener cuidado de poner «%p» frente a cada comando. Como se puede ver los comandos son simples, la seccion de comandos independientes puede estar vacia.
Ahora si necesitamos Compilar pulsaremos el boton de compilacion de Geany, asi mismo para Ejecutar y Construir. Dentro del archivo build.xml tambien hay dos opciones más, la primera «limpiar» que borra la carpeta «class» y su contenido; y la segunda «borrar» que borra el archivo jar creado por el comando «Construir». Para llamar a estas funciones podemos usar el terminal embebido de Geany, ubicarnos en la carpeta base del proyecto y escribir «ant limpiar» o «ant borrar» según como se necesite. Aqui un ejemplo:
Y aqui una captura de un proyecto java que hice en Geany:
Compilando:
Ejecutando:
Esta configuracion incluso sirve para cuando hacemos proyectos con JPA ya sea con Hibernate JPA o con Eclipse JPA para ello creamos un directorio llamado META-INF dentro de la carpeta «src» y creamos o pegamos el archivo persistence.xml. Aqui un modelo:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="nombreProyectoPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!--Modelo de agregación de clase-->
<class>paquete.subpaquete.nombreClase</class>
<properties>
<!--Poner nombre base de datos-->
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/nombreBD?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.password" value="clave"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="usuario"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
Claro está que se debe poner los jars correspondientes dentro de la carpeta «libs».
Espero que este pequeño tutorial les sirva, si tienen alguna duda comenten 🙂 …