Permalänk
Medlem

Ant, problem med beroenden

Blir inte riktigt klok på Ant, har några filer i två olika paket som beror på varandra som jag inte lyckas få Ant att kompilera. Mappstrukturen är:
./ (här finns bara en javafil som sparkar igång allt än så länge)
./Communication/
./GUI/

Några av filerna i Communication har beroende på filer i GUI och tvärtom, att kompilera det manuellt med javac är ingaproblem, står jag i roten och ger:

javac -cp .:GUI Communication/*.java javac -cp .:Communication GUI/*.java

så kompileras allt utan problem.

I Ant har jag lagt upp delarna så här:

<property name="build.dir" location="./build/"/> <property name="jar.dir" location="./release/"/> <property name="GUI.dir" location="./GUI/"/> <property name="Communication.dir" location="./Communication/"/> <property name="GUI.Images.dir" location="GUI/Images/"/> <target name="clean" description="remove intermediate files"> <delete dir="${build.dir}"/> <delete dir="${jar.dir}"/> </target> <target name="all" depends="prepare, compile"/> <target name="prepare"> <tstamp/> <mkdir dir="${build.dir}"/> <mkdir dir="${jar.dir}"/> </target> <target name="compile" depends="prepare,GUI,Communication" description="Main"> <javac srcdir="." destdir="${build.dir}"> <classpath refid="project.classpath"/> </javac> </target> <target name="GUI" description="GUI components"> <javac srcdir="${GUI.dir}" destdir="${build.dir}"> <classpath location="./"/> <classpath location="${Communication.dir}"/> </javac> </target> <target name="Communication" description="Communication components"> <javac srcdir="${Communication.dir}" destdir="${build.dir}"> <classpath location="./"/> <classpath location="${GUI.dir}"/> </javac> </target>

Detta fungerar dock inte, javac klagar då på att paketet GUI resp. Communication ej existerar beroende på vilken target som kompileras och således får jag en drös med kompileringsfel. Någon som har en aning om hur jag löser detta? Kompilerar jag något av paketen manuellt och sedan kör med Ant så fungerar det, men då får jag en massa classfiler bland mina javafiler vilket jag inte vill ha. Samt att jag måste kompilera om manuellt om jag gör ändringar i paketet, annars jobbar Ant mot gammal kod.

Jag har provat att sätta beroenden på Communication och GUI med depends="", men det fungerar inte, och att låta båda bero på varandra ger en rundgång som Ant ej accepterar.

Visa signatur

WS: Fractal Design Pop Silent | Seasonic Prime G12 GC 550W | Gigabyte B650 Eagle AX | Ryzen 7 7700 | Corsair 64GB DDR5 | Asus Xonar DX | Arch Linux (x86_64) | Eizo EV2795
HTPC: Philips 50PUS8804, Kodi samt extern usb-disk
Server: Raspberry Pi 4 | 8GB RAM | HDD 750GB | Arch Linux (armv7h)

Permalänk
Medlem

Tjo!

Du är medveten om att javac-goalet i ant är rekursivt? Om du kör <javac src="."> så tar den alla java-filer i den katalogen och underkataloger. Då kommer den hitta Communication och GUI-katalogerna med javafiler och försöka kompilera dem, men den kommer bli sur då de inte ligger i kataloger med motsvarande paketnamn.

Så, flytta din start-fil till en egen katalog och kör den också (src är ett vanligt namn).

//C

Permalänk
Medlem

Hrm, jag får det ändå inte att fungera, det blir samma fel som innan.

EDIT: Har nu löst problemet, satte sourcepath="" på GUI och Communication-targetarna.

Visa signatur

WS: Fractal Design Pop Silent | Seasonic Prime G12 GC 550W | Gigabyte B650 Eagle AX | Ryzen 7 7700 | Corsair 64GB DDR5 | Asus Xonar DX | Arch Linux (x86_64) | Eizo EV2795
HTPC: Philips 50PUS8804, Kodi samt extern usb-disk
Server: Raspberry Pi 4 | 8GB RAM | HDD 750GB | Arch Linux (armv7h)