Makefile för Java

gnu make Hur många av er Java programmerare har haft problem att kompilera program? bibliotek ut $ CLASSPATH, parametrar övergå till Java-kompilator kilometer. Även med hjälp utvecklingsmiljöer för Java, inte förbättra situationen inte mycket. Vi tillbringar mycket tid att ställa paramteri och varje gång du kör sammanställning alltid missa något!

Du kan undvika alla dessa problem bara genom att organisera Java källan och använda en Makefile skrevs för det ändamålet.

Vad är en Makefile

En Makefile är en fil som beskriver åtgärder för att efftuare att komma till de filer som vi får trädet och alla dess beroenden. Den används ofta i Unix-baserade plattformar och kan användas för att sammanställa varje programtyp. Det gör nytta tolkar Makefile och kompilera källkoden för körbara program och bibliotek.

Fördelar med att använda

Många av er är skeptiska till att använda en Makefile för varje Java-projekt av den enkla anledningen att Makefile måste ange alla beroenden mellan filer, som förvisso varierar från projekt till projekt. Så vi borde skriva en Makefile olika för alla våra projekt. Denna gräns kan övervinnas genom att skriva en allmän Makefile som kan beräkna alla beroenden för att projektet skall slutföras för att använda samma skript för alla projekt utan moficare insidan av Makefile.

Absolut inte försumbar fördel är förmågan att göra bara det du behöver fylla. Undvik att göra det som är redan klar och har inte ändrats med en betydande besparingar av tid.

Med en enda Makefile du kan bygga alla källor av projektet.

Hur du använder

Makefilen att jag skrev att bygga Java-projekt kan användas utan modifikation för projekt som har en viss katalog struktur. Java källa borde ha en katalog för i. Java, en för filer. Klass, och en burk för biblioteken.
Exempel:

  | - Src
 | `- Main
 | | - Java
 | | `- Com
 | | `- Exempel
 | | | - ExampleA.java
 | | | - ExampleB.java
 | | `- ExampleC.java
 | `- Resurser
 | `- Res.java
 | - Klasser
 | - Libs
 | | - Allmänt
 | | | - Databas
 | | | | - DB1.jar
 | | | `- DB2.jar
 | `- Logging
 | `- Log.jar
 | - Burkar

För att använda den, så skriv bara koden nedan i Makefile i rotkatalogen för projektet, kontrollera att namnet på den katalog som anges i filen (för klasser. Klass, till src. Libs för Java och jar) och starta kommando make
Det är allt. Om vi vill också ha en burk som innehåller hela projektet bara köra make && make jar

Makefile

  #
 # Makefile
 # Author: Danilo Abbasciano
 #

 # Set här katalogerna för klasser och källor
 CLASS_DIR = klasser
 SOURCE_DIR src =
 JARS_DIR burkar =

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

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

 Fält # compiler
 # JDEBUGFLAGS =- g-avskrivningar
 # JDEBUGFLAGS =- O-bero-nowarn
 ) / javac JCC = $ (JAVA_HOME) / javac

 clean classes compile jar . FALSKA: ren sammanställa burk klasser

 alla:
	 SUBDIRS ) ; do \ @ @ För P i $ (SUBDIRS); do \
		 p ; \ echo "kompilera" $ $ p; \
		 $$ p ; \ Export SUBD = $ $ p; \
		 print - directory compile ; \ gör - no - Print - katalog kompilera, \
	 gjord

 Renlighet:
	 f * ~ *. class *. bak $ ( foreach dir ,$ ( SUBDIRS ) ,$ ( CLASS_DIR ) /$ ( dir ) /*. class ) - RM - f * ~ *. bak *. klass $ (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) / projekt. burk *

 sammanställa klasser

 # Skapa dir mål klass om inte närvarande.
 ) : $ (LOCAL_CLASS_DIR):
	 LOCAL_CLASS_DIR ) mkdir - P $ (LOCAL_CLASS_DIR)


 Ny Regel # for Java
 . Suffix:
 java . class . Suffix:. Java. TCLASS


 # Magical kommando som talar om att finna klass filer i en annan dir
 class $ ( LOCAL_CLASS_DIR ) vpath%. klass $ (LOCAL_CLASS_DIR)
 java $ ( LOCAL_SOURCE_DIR ) vpath%. Java $ (LOCAL_SOURCE_DIR)

 # Classpath, alla in / Burkar och. / 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 burk /*/*/*. burkar burk / * . jar))

 # Compil kommandot
 class : . Java. Class:
	 ) $ ( JCC ) - nowarn - d $ ( CLASS_DIR ) $ ( JDEBUGFLAGS ) $< CLASSPATH = $ (LIBCLASSPATH) $ (JCC) - nowarn - d $ (CLASS_DIR) $ (JDEBUGFLAGS) $ <

 # Ta reda på målfilerna
 $ ( LOCAL_SOURCE_DIR ) /*. java ) PATHFILES = $ (wildcard $ (LOCAL_SOURCE_DIR) / *. java)
 $ ( LOCAL_SOURCE_DIR ) /,,$ ( PATHFILES ) ) FILES = $ (subst $ (LOCAL_SOURCE_DIR) /,, $ (PATHFILES))
 java =. class ) klasser: $ (FILES:. java =. klass) 

Bra sammanställning.

En Svaren till "Makefile för Java"

  1. thegamer - 28 augusti 2009

    Jag föredrar mycket myra!
    Du borde prova det ...

Lov en Svara