Kompileringsrækkefølge og parallellisering

Som standard kompilerer PDE/Build plugins ved at delegere gennem funktionsstrukturen. Funktioner besøges først i dybden, plugins i de enkelte funktioner kompileres i afhængighedsrækkefølge (afgøres af OSGi-resolveren).

Det betyder, at alle afhængigheder af et bestemt bundt skal være indeholdt i samme funktion eller i en funktion, der forekommer tidligere i dybde-først-krydsningen af funktionsinkluderingshierarkiet. Det kan gøre det svært at organisere funktionerne.

Gør afhængigheder flade

Noget nyt i 3.5 er en byggeprogramegenskab, flattenDependencies. Hvis du indstiller denne egenskab til true, vil PDE/Build i stedet sortere alle plugins uden hensyn til funktionsgrænser. PDE/Build vil derefter generere et nyt byggescript, compile.<feature>.xml, som indeholder en liste over alle plugins i rækkefølge, sorteret efter deres afhængigheder. Herved kan du partitionere dine bundter i forskellige funktioner i forhold til deres funktionalitet uden at bekymre dig om deres indbyrdes afhængigheder.

Parallel kompilering

Hvis flattenDependencies er angivet, kan PDE/Build kompilere bundter parallelt. Det sker ved at partitionere den sorterede liste med bundter i grupper, hvor hver gruppe indeholder bundter, der kun er afhængige af bundter i tidligere grupper.

Hver gruppe er derefter indpakket i en <parallel> Ant-opgave. Følgende egenskaber kontrollerer funktionsmåden af parallelliseringen:

parallelCompilationAngiv til true for at aktivere parallel kompilering. (Kræver flattenDependencies=true)
parallelThreadCountDet maksimale antal programdele, der skal anvendes. Standardværdien er 3. Svarer til threadCount på den parallelle Ant-opgave.
parallelThreadsPerProcessorDet maksimale antal programdele, der skal anvendes pr. tilgængelig processor. Svarer til threadsPerProcessor på den parallelle Ant-opgave.

Det kompilerede script, der genereres, ser nogenlunde sådan ud:

  <project name="Kompileringsmaster" default="main">
     <target name="main">
        <parallel threadsPerProcessor='3'>
             <ant antfile="build.xml" dir="plugins/org.eclipse.osgi" target="build.jars"/>
        </parallel>
        <parallel threadsPerProcessor='3'>
             <ant antfile="build.xml" dir="plugins/org.eclipse.equinox.common" target="build.jars"/>
             <ant antfile="build.xml" dir="plugins/org.eclipse.equinox.p2.jarprocessor" target="build.jars"/>
        </parallel>
        <parallel threadsPerProcessor='3'>
             <ant antfile="build.xml" dir="plugins/org.eclipse.update.configurator" target="build.jars"/>
             <ant antfile="build.xml" dir="plugins/org.eclipse.equinox.simpleconfigurator" target="build.jars"/>
             <ant antfile="build.xml" dir="plugins/org.eclipse.equinox.frameworkadmin" target="build.jars"/>
             <ant antfile="build.xml" dir="plugins/org.eclipse.core.jobs" target="build.jars"/>
             <ant antfile="build.xml" dir="plugins/org.eclipse.core.databinding.observable" target="build.jars"/>
             <ant antfile="build.xml" dir="plugins/org.eclipse.swt" target="build.jars"/>
             ...