[java] ant en project dependencies.

Pagina: 1
Acties:

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik ben bezig om al mijn projecten te bundelen mbv een superbuild en dat gaat allemaal heel aardig. Het enigste waar ik nog geen oplossing voor heb gevonden is bij afhankelijkheden tussen de projecten.

Ik heb intussen de volgende masterbuild build.xml

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<project name="Master-Builder" default="clean-dist-all">


    <target name="do-appender">
        <ant dir="appender" target="${target}" inheritAll="false"/>
    </target>

    
    <target name="do-nullRejectors">
        <ant dir="nullRejectors" target="${target}" inheritAll="false"/>
    </target>
        
        
    <target name="do-swingWidgets">
        <ant dir="swingWidgets" target="${target}" inheritAll="false"/>
    </target>

    
    <target name="do-indentBuffer">
        <ant dir="indentBuffer" target="${target}" inheritAll="false"/>
    </target>
    
    
    <target name="do-all" depends="do-appender,do-nullRejectors,do-swingWidgets,do-indentBuffer"/>
    
            
    <target name="clean-all">
        <antcall target="do-all"> 
            <param name="target" value="clean"/>
        </antcall>
    </target>
    
    
    <target name="dist-all">
        <antcall target="do-all"> 
            <param name="target" value="dist"/>
        </antcall>
    </target>
    
    
    <target name="clean-dist-all" depends="clean-all,dist-all"/>
    
</project> 


In dit geva worden de afhankelijkheden tussen de projecten goed opgezet, maar de jars van de subprojecten worden niet gecopieerd. En als ik in een subproject zit, en ik wil een fresh build, en dat project heeft afhankelijkheden naar een ander subproject, dan zou ik het liefst zien dat hij de eventueel verouderde jars verwijderd en opnieuw dat subproject gaat builden.

Ik krijg dit wel voor elkaar door gewoon een paar copieer task ed te maken, maar ik vind dit een hele rommelige oplossing. Wie kan me wat verder helpen?

  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 09:23
Ik kan je alleen helpen met voorbeelden, ik draai mijn project op ant alleen heb ik dit project van iemand overgenomen dus heb ik niets zelf opgebouwd, hierdoor heb ik dus helaas alleen maar copy/paste-kennis van ant. Je mag mijn build files gebruiken als voorbeeld, ik kan ze hier alleen niet posten.

Groetjes


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
yrew schreef op 11 September 2003 @ 11:21:
Ik kan je alleen helpen met voorbeelden, ik draai mijn project op ant alleen heb ik dit project van iemand overgenomen dus heb ik niets zelf opgebouwd, hierdoor heb ik dus helaas alleen maar copy/paste-kennis van ant. Je mag mijn build files gebruiken als voorbeeld, ik kan ze hier alleen niet posten.
Kan je hem misschien mailen? En ik zoek ook niet zozeer iets voor 1 project, maar meer het managen van meerdere projecten.

[ Voor 10% gewijzigd door Alarmnummer op 11-09-2003 11:54 ]


Verwijderd

Kun je depends= niet gebruiken in de verschillende targets?

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

maak gebruik van "unless" statement en check op een bepaalde property. Voorbeeldje, in onderstaande task maak ik gebruik van property "cvsAlreadyLoggedIn" en hoef ik maar 1 keer in te loggen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
    <!-- Makes the CVS login transparant to the user -->
    <!-- sets property cvsAlreadyLoggedIn -->
    <target name="CVSinit">
        <available file="${user.home}/.cvspass" property="cvsAlreadyLoggedIn" />
        <antcall target="CVSlogin" />
    </target>
    
    <!-- Log into CVS -->
    <!-- Only called if we aren't logged in -->
    <target name="CVSlogin" description="Log into CVS" unless="cvsAlreadyLoggedIn">
        <cvspass cvsroot="${cvs.root}" password="${cvs.password}" />
    </target>


in mijn dependecy hoef ik dan alleen gebruik te maken van de task "CVSinit"

code:
1
2
3
4
5
6
7
    <target name="standalone"
        depends="clean,init, CVSinit, CVScheckout, copycommon, copyfiles, copyvlamish, compileVLLClient, buildVLLClient, compileVLL, buildVLL"
        description="Build, compile and deploy a standalone release">
        <antcall target="deployRelease">
            <param name="foldername" value="Standalone" />
        </antcall>
    </target>


HTH :)

"You're only as good, as what you did last week."


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op 11 September 2003 @ 11:55:
Kun je depends= niet gebruiken in de verschillende targets?
In mijn masterbuild is het geen probleem om dependencies te gebruiken:

code:
1
2
3
4
5
6
7
8
<target name="do-nullRejectors">
    <ant dir="nullRejectors" target="${target}" inheritAll="false"/>
</target>
        
        
<target name="do-swingWidgets" depends="do-nullRejectors">
    <ant dir="swingWidgets" target="${target}" inheritAll="false"/>
</target>


Dat is dus niet het probleem. Maar ik wil als ik bv swingWidgets ga builden, alle jars die door nullRejectors zijn aangemaakt, verwijderen en die ook volledig opnieuw laten builen.

Als dit niet automatisch gebeurt loop je namelijk de kans dat je bij SwingWidgets nog met een oude jar van NullRejectors loopt te werken (waar misschien bugs inzitten). Ik wil dus geautomatiseerd overal de nieuwste libraries hebben. Niet meer met de hand copieren dus, en verder wil ik niet dat ik dit in mijn masterbuild ga hacken maar op een manier ga doen die een beetje meeschaalt met mijn grote hoeveel kleine projecten.

[ Voor 32% gewijzigd door Alarmnummer op 11-09-2003 12:37 ]


  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 09:23
Maar je hebt al je jars dus niet op 1 centrale plek staan begrijp ik?

Groetjes


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
yrew schreef op 11 September 2003 @ 12:47:
Maar je hebt al je jars dus niet op 1 centrale plek staan begrijp ik?
Idd. Het zijn allemaal losse projecten die zo nu en dan afhankelijk zijn van andere projecten. In dit geval zou SwingWidgets afhankelijk kunnen zijn van NullRejectors.

Ik krijg dan de volgende structuur:

projects/nullRejectors/build/jars/NullRejectors.jar
....
projects/swingWidgets/build/jars/swingWidgets.jar
projects/swingWidgets/lib/NullRejectors.jar
....

Maar ik wil niet iedere keer die NullRejectors.jar uit zijn dist directory copieeren naar de lib directory van swingWidgets.

Ik weet niet of je ervaring hebt met gentoo, maar stel je wilt een programma compileren, worden daarvoor ook eerst alle onderdelen opgehaald waarvan het programma afhankelijk is. Hetzelfde wil ik met mijn builds.

[ Voor 25% gewijzigd door Alarmnummer op 11-09-2003 12:54 ]


  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 09:23
Moet kunnen. Je kunt met ant verwijzingen geven naar andere build files. Voordat je dus de daadwerkelijke compileer "methode" van je programma aanroept, roep je eerst de compileer "methode" van alle onderdelen aan waarvan je weet dat hij afhankelijk is. Daarna gewoon je eigen compileer "methode" aanroepen. Wel moet je dan aangeven vie een jar node welke jars je programma gebruikt. Als je het op deze manier doet werk je niet met oude jars.

Je hoeft dan niet die Jars te kopieeren omdat je in je build.xml gewoon preices het pad opgeeft waar de jar staat.

[ Voor 16% gewijzigd door yrew op 11-09-2003 13:03 ]

Groetjes


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
yrew schreef op 11 september 2003 @ 13:00:
Moet kunnen. Je kunt met ant verwijzingen geven naar andere build files. Voordat je dus de daadwerkelijke compileer "methode" van je programma aanroept, roep je eerst de compileer "methode" van alle onderdelen aan waarvan je weet dat hij afhankelijk is. Daarna gewoon je eigen compileer "methode" aanroepen. Wel moet je dan aangeven vie een jar node welke jars je programma gebruikt. Als je het op deze manier doet werk je niet met oude jars.
Het wil ook wel, dat is niet zozeer het probleem. Ik wil alleen dat het automatisch gaat zonder dat je op den duur verstrikt raakt in de dependencies. In 'Developing with ANT' van Manning staat uitgelegd hoe je het in het algemeen voor elkaar krijgt. Via een masterbuild kan je via targets hun dependencies de dependencies tussen de projecten simuleren. Alleen allerlei extra taken, zoals gecreeerde libraries copieren, laten zich slecht vertalen hiermee.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Je hoeft dan niet die Jars te kopieeren omdat je in je build.xml gewoon preices het pad opgeeft waar de jar staat.
Ik moet ze wel copieren omdat al mijn subprojecten ook los gebruikt moeten kunnen worden (dus zonder masterbuild). Hierdoor moet je wel gaan copieren.

  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 09:23
Hmmmm......ik denk dat ik ff stil ben nu.......

Ik weet niet of dit mogelijk is met Ant zonder dat je zelf de dependecies aangeeft.

Groetjes


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
yrew schreef op 11 september 2003 @ 13:06:
Hmmmm......ik denk dat ik ff stil ben nu.......

Ik weet niet of dit mogelijk is met Ant zonder dat je zelf de dependecies aangeeft.
Op deze manier kan je dependencies tussen projecten simuleren.
code:
1
2
3
4
5
6
7
8
<target name="do-nullRejectors">
    <ant dir="nullRejectors" target="${target}" inheritAll="false"/>
</target>
        
        
<target name="do-swingWidgets" depends="do-nullRejectors">
    <ant dir="swingWidgets" target="${target}" inheritAll="false"/>
</target>


Het is dus wel mogelijk. Je kan ook met de hand alle targets gaan maken en met de hand alle dependencies aangeven. Het probleem aan deze aanpak is dat het niet meeschaalt met een groot aantal projecten. Ik wil al mijn 'handige tools' afzonderlijk in subprojecten gaan plaatsen omdat ik een enorme hekel heb aan onnodige bestanden. Aangezien veel projecten van andere projecten afhankelijk zijn, wil ik dat dit automatisch gaat gebeuren en je het niet meer met de hand hoeft te doen.

[ Voor 58% gewijzigd door Alarmnummer op 11-09-2003 13:10 ]


  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 09:23
Alarmnummer schreef op 11 September 2003 @ 13:05:
[...]

Ik moet ze wel copieren omdat al mijn subprojecten ook los gebruikt moeten kunnen worden (dus zonder masterbuild). Hierdoor moet je wel gaan copieren.
ja kan toch gewoon simpel in je build file vermelden waar die jar te vinden zou moeten zijn.

En als je nu nog het idee hebt dat ik het verkeerd begrijp dan is mijn gehele project kennis te laag

ga ik maar weer eens proberen om jaybird aan de gang te krijgen....gvdmm al heel de ochten mee verziekt...

Verder denk ik dat ant echt een script iets is. Je stopt er wat in en je krijgt er wat uit. Maar als je er zelf niets instopt zal Ant je ook niets terug geven. Volgens mij zul je altijd één keer aan moeten geven hoe/wat/ en waar.

[ Voor 22% gewijzigd door yrew op 11-09-2003 13:16 ]

Groetjes


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

volgens mij wordt ik hier gewoon genegeerd maar goed ;) ...kan je nog een goed boek aanraden "Extreme Programming with Ant" waarin met behulp van cases uit de praktijk problemen worden getackled. Hieruit heb ik ook het voorbeeld over "unless" statement wat ik al eerder aanhaalde.

"You're only as good, as what you did last week."


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
oh,when? schreef op 11 September 2003 @ 13:27:
volgens mij wordt ik hier gewoon genegeerd maar goed ;) ...kan je nog een goed boek aanraden "Extreme Programming with Ant" waarin met behulp van cases uit de praktijk problemen worden getackled. Hieruit heb ik ook het voorbeeld over "unless" statement wat ik al eerder aanhaalde.
Ik ken de unless, maar ik zie niet in hoe ik hem voor dit probleem kan toepassen.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
*kick*

Ik heb de hele ANT site lopen afstruinen, maar niets gevonden. Ik zit er trouwens aan te denken om ANT te dumpen en Jython te gebruiken voor builden van het mega project. Het probleem alleen is dat niet iedereen Jython op zijn bak heeft staan en dus niet zomaar mijn projects kan builen. Dit is dus een zwaar minpunt..

  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 09:23
Ook niet iedereen heeft ant ;). Maar wat jij zoekt is volgens mij iets wat ant-scripts zou genereren( of iig een groot gedeelte ervan.) Je wil niet zelf de dependecies aangeven, maar ant zou dit zelf moeten doen.

Ik denk niet dat dit gaat lukken met ant. Je zult altijd zelf de scripts moeten schrijven....tenzij er ondersteunende tools zijn voor ant? Een ant voor jbuilder ofzoiets die de scripts grafisch weer kan geven en hele 'mooie' scipts zal generen.
ga ik maar weer eens proberen om jaybird aan de gang te krijgen....gvdmm al heel de ochten mee verziekt...
zo vrijdag middag vijf over vier, super gaar....en eindelijk de tien letters gevonden die ik moest veranderen.....gdglndgdgdgdvrdmm wat is programmeren leuk.

Groetjes

Pagina: 1