Makefile för Java
![]() | 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"
thegamer - 28 augusti 2009
Jag föredrar mycket myra!
Du borde prova det ...
Lov en Svara