Makefile para Java

gnu make ¿Cuántos de ustedes los programadores de Java han tenido problemas para compilar programas? bibliotecas fuera de $ CLASSPATH, los parámetros para pasar a la altura del kilómetro compilador de Java. Incluso la utilización de entornos de desarrollo para Java, la situación no mejora mucho. Pasamos mucho tiempo para establecer paramteri y cada vez que se ejecute la compilación siempre falta algo!

Usted puede evitar todos estos problemas simplemente mediante la organización de la fuente de Java y el uso de un Makefile por escrito para tal fin.

¿Qué es un Makefile

Un Makefile es un archivo que describe los pasos a efftuare para llegar a los archivos que tenemos el árbol y todas sus dependencias. Es ampliamente utilizado en Unix plataformas basadas y pueden ser utilizados para elaborar cada tipo de programa. La utilidad make interpreta el Makefile y compilar el código fuente de programas ejecutables y bibliotecas.

Ventajas de usar que

Muchos de ustedes son escépticos respecto de la utilización de un makefile para cada proyecto Java por la sencilla razón de que el makefile tiene que especificar todas las dependencias entre archivos, lo que ciertamente varía de proyecto a proyecto. Así que debemos escribir un makefile diferentes para cada uno de nuestro proyecto. Este límite puede ser superado por escrito un makefile genéricos que se pueden calcular todas las dependencias para que el proyecto se complete a fin de utilizar el mismo guión para todos los proyectos sin que nada moficare en el Makefile.

Ciertamente, no es despreciable ventaja es la capacidad de hacer sólo lo que necesita llenar. Por favor, evite hacer lo que ya está terminado y no ha sido modificado con un ahorro sustancial de tiempo.

Con un makefile que usted puede construir todas las fuentes del proyecto.

Cómo usar

El makefile que escribí para construir proyectos de Java puede ser utilizado sin modificaciones para los proyectos que tienen una estructura de directorio determinado. El código fuente Java debería tener un directorio para i. Java, una para los archivos. Clase, y una vasija para las bibliotecas.
Ejemplo:

  | - Src
 | `- Principal
 | | - Java
 | | `- Com
 | | `- Ejemplo
 | | | - ExampleA.java
 | | | - ExampleB.java
 | | `- ExampleC.java
 | `- Recursos
 | `- Res.java
 | - Clases
 | - Libs
 | | - General
 | | | - Base de datos
 | | | | - DB1.jar
 | | | `- DB2.jar
 | `- Registro
 | `- Log.jar
 | - Jars

Para utilizar ella, tan sólo escribe el código de abajo en el Makefile en el directorio raíz del proyecto, compruebe que el nombre del directorio es el especificado en el archivo (para las clases. Clase, por src. Librerías para java y jar) y el lanzamiento del mando make
Eso es todo. Si también queremos un frasco que contiene el proyecto en su conjunto sólo ejecute make && make jar

Makefile

  #
 # Makefile
 # Autor: Danilo Abbasciano
 #

 # Establezca aquí los directorios de las clases y las fuentes de
 CLASS_DIR = clases
 SOURCE_DIR src =
 Frascos JARS_DIR =

 find $ ( SOURCE_DIR ) - name "*.java" - printf % h\\n | sort | uniq | sed 's/$(SOURCE_DIR) \/ \? //' ) SUBDIRS: = $ (shell encontrar $ (SOURCE_DIR) - name "*. java" -% h printf \ n | sort | uniq | sed 's / $ (SOURCE_DIR) \ / \? / /')

 local / java / bin JAVA_HOME = / usr / local / java / bin

 Campo # compilador
 # JDEBUGFLAGS =- g-desaprobación
 # JDEBUGFLAGS =- O-dependen-nowarn
 ) / javac CCM = $ (JAVA_HOME) / javac

 clean classes compile jar . PHONY: Limpieza compilar las clases jar

 todos:
	 SUBDIRS ) ; do \ @ @ Para p en $ (SUBDIRS); hacer \
		 p ; \ echo 'compilar' $ $ p; \
		 $$ p ; \ Exportación SubD = $ $ p; \
		 print - directory compile ; \ que - no - de impresión - directorio de compilación, \
	 hecho

 Limpieza:
	 f * ~ *. class *. bak $ ( foreach dir ,$ ( SUBDIRS ) ,$ ( CLASS_DIR ) /$ ( dir ) /*. class ) - Rm - f * ~ *. bak *. class $ (foreach dir, $ (SUBDIRS), $ (CLASS_DIR) / $ (dir) / *. class)


 ) /$ ( SUBDIR ) LOCAL_CLASS_DIR = $ (CLASS_DIR) / $ (SubD)
 ) /$ ( SUBDIR ) LOCAL_SOURCE_DIR = $ (SOURCE_DIR) / $ (SubD)

 JAR:
	 ) ; jar - cf ../$ ( JARS_DIR ) / project . jar * cd $ (CLASS_DIR); JAR - cf .. / $ (JARS_DIR) / proyecto. jar *

 compilar: clases

 # Crear la clase de destino dir si no está presente.
 ) : $ (LOCAL_CLASS_DIR):
	 LOCAL_CLASS_DIR ) mkdir - p $ (LOCAL_CLASS_DIR)


 Nueva Regla # para Java
 . SUFIJOS:
 java . class . SUFIJOS:. Java. Clase


 # Comando mágico que le dice a make para encontrar archivos de clase en otro dir
 class $ ( LOCAL_CLASS_DIR ) vpath%. $ class (LOCAL_CLASS_DIR)
 java $ ( LOCAL_SOURCE_DIR ) vpath%. java $ (LOCAL_SOURCE_DIR)

 # Rutas de clases, todos los in / Jars y. / Libs
 ) :$ ( SOURCE_DIR ) :$ ( subst . jar ,. jar :,$ ( wildcard libs /*. jar libs /*/*. jar libs /*/*/*. jar jars /*. jar ) ) LIBCLASSPATH: = $ (CLASS_DIR): $ (SOURCE_DIR): $ (subst. JAR,. Jar:, $ (wildcard libs / *. jar libs /*/*. libs jar /*/*/*. frascos jar / * . jar))

 # Comando Compil
 class : . Java. Clase:
	 ) $ ( JCC ) - nowarn - d $ ( CLASS_DIR ) $ ( JDEBUGFLAGS ) $< CLASSPATH = $ (LIBCLASSPATH) $ (CCM) - nowarn - d $ (CLASS_DIR) $ (JDEBUGFLAGS) $ <

 # Descubra los archivos de destino
 $ ( LOCAL_SOURCE_DIR ) /*. java ) PATHFILES = $ (wildcard $ (LOCAL_SOURCE_DIR) / *. java)
 $ ( LOCAL_SOURCE_DIR ) /,,$ ( PATHFILES ) ) FILES = $ ($ subst (LOCAL_SOURCE_DIR) /,, $ (PATHFILES))
 java =. class ) clases: $ (FILES:. =. clase java) 

Buena compilación.

Una respuesta a "Makefile para Java"

  1. thegamer - 28 de agosto 2009

    Me gusta mucho más hormiga!
    Usted debe probarlo ...

Deje una contestación