Makefile för Java

gnu make Hur många av er Java programmerare har haft problem kompilera program? bibliotek ut $ CLASSPATH, Kilometerersättningen parametrar övergå till Java-kompilator. Även med hjälp utvecklingsmiljöer för Java, inte förbättra situationen inte mycket. Vi spenderar mycket tid parameter och som varje gång du börjar fylla 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 steg efftuare att komma till filer som vi får trädet och alla dess beroenden. Det används i Unix-baserade plattformar och kan användas för att sammanställa varje program typ. Den gör nytta tolkar Makefile och kompilera källkoden för körbara program och bibliotek.

Fördelar med att använda gör

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 beroenden mellan filer, som verkligen varierar från projekt till projekt. Så vi borde skriva en Makefile för varandra vårt projekt. Denna gräns kan övervinnas genom att skriva en Makefile-generator kan beräkna alla beroenden för att projektet skall slutföras använda samma skript för alla projekt utan moficare någonting i Makefile.

Absolut inte försumbar fördel är förmågan att bara göra tillräckligt för att fylla. Undvik att göra vad som redan är klar och har inte förändrats med en betydande besparing av tid.

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

Hur du använder

Den Makefile att jag skrev att bygga Java-projekt kan användas utan modifiering för projekt som har en viss katalogstruktur. Java källan bör ha en katalog för. Java, en för filer. Klass, och en burk för biblioteken.
Till exempel:

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

Att använda det, sedan bara skriva 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 burk) och starta kommandot make
det är allt. Om vi vill ha en burk som innehåller hela projektet bara köra make && make jar

Makefile

  #
 # Makefile
 # Författare: Danilo Abbasciano
 #

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

 find $ ( SOURCE_DIR ) - name "*.java" - printf % h\\n | sort | uniq | sed 's/$(SOURCE_DIR) \/ \? //' ) Underkataloger: = $ (skal finna $ (SOURCE_DIR) - namnet "*. java" - printf% h \ n | sortera | uniq | sed 's / $ (SOURCE_DIR) \ / \? / /')

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

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

 clean classes compile jar . Telefoni: ren sammanställa jar klasser

 till:
	 SUBDIRS ) ; do \ @ @ För p $ (underkataloger), göra \
		 p ; \ echo "kompilera" $ $ p, \
		 $$ p ; \ Export SubD = $ $ p, \
		 print - directory compile ; \ gör - inte - skriv ut - sammanställa katalogen, \
	 gjort

 ren:
	 f * ~ *. class *. bak $ ( foreach dir ,$ ( SUBDIRS ) ,$ ( CLASS_DIR ) /$ ( dir ) /*. class ) - RM - f * ~ *. bak *. klass $ (foreach dir, $ (underkataloger) $ (CLASS_DIR) / $ (dir) / *. class)


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

 burk:
	 ) ; jar - cf ../$ ( JARS_DIR ) / project . jar * cd $ (CLASS_DIR) JAR - jfr .. / $ (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 # för Java
 . Suffix:
 java . class . Suffix:. Java. Klass


 # Det säger göra magiska kommandot för att hitta klassen filer i dir annan
 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 burken / * . burk))

 # Compiler kommandot
 class : . Java. Klass:
	 ) $ ( 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: $ (filer:. java =. klass) 

Bra sammanställning.

En Svaren till "Makefile för Java"

  1. thegamer - 28 augusti, 2009

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

Lämna ett svar