2017-08-31 1 views
0

Ich versuche unter Hierarchie in Ant zu implementieren:Ant Projekt mehrere Ordner enthält, zu bauen

ParentProject

build.xml 
RuntimeFolder_1 
    build.xml 
RuntimeFolder_2 
    build.xml 
RuntimeFolder_n 
    build.xml 

Hier Als ich Parent build.xml bauen, sollte es alle untergeordneten Ordner iterieren und bauen Sie. Ein Benutzer kann beliebig viele Laufzeitordner hinzufügen. Außerdem sollte ich RuntimeFolder_1 ... RuntimeFolder_n einzeln erstellen können. Weiß jemand, wie ich das machen kann?

+0

Schritt 1: Stoppen Sie die Verwendung von ant. Schritt 2: Starten Sie mit [Gradle] (https://docs.gradle.org/current/userguide/java_plugin.html) –

+0

Kann ich es leicht mit Gradle irgendein Beispiel tun? –

+0

Natürlich kann es gemacht werden, die Lösung hängt davon ab, wie Sie wollen, dass es funktioniert. Möchten Sie einen einzelnen Multiprojekt-Build erstellen, der zusammen erstellt und freigegeben wird und in einem einzigen Quell-Repository (mit Abhängigkeiten zwischen Projekten) lebt? Oder möchten Sie viele separate Builds, die separat releasefähig sind und in separaten Quell-Repositories (auch mit Abhängigkeiten voneinander) und einem "Uber" -Build existieren können, um sie alle auf einmal auszuführen? –

Antwort

0

Dazu können wir subant verwenden: http://ant.apache.org/manual/Tasks/subant.html

Unten ist das Beispiel:

Elternteil build.xml enthält:

<macrodef name="iterate"> 
    <attribute name="target"/> 
    <sequential> 
     <subant target="@{target}"> 
      <fileset dir="modules" includes="*/build.xml"/> 
     </subant> 
    </sequential> 
</macrodef> 
<target name="compile"> 
    <iterate target="compile"/> 
</target> 

Innerhalb Ordner build.xml wird diese Ziele enthalten.

1

Ich weiß, dass die OP Ant angefordert, aber er hat ein Interesse an einer Gradle Lösung ausgedrückt, die

aussehen könnte
build.gradle 
settings.gradle 
project1/ 
    build.gradle 
project2/ 
    build.gradle 
project3/ 
    build.gradle 

Ihre settings.gradle aussehen könnte

rootDir.listFiles().each { 
    if (new File(it, 'build.gradle').exists()) { 
     include ":$it.name" 
    } 
} 

Sie würden dann die java anwenden Plugin zu jedem Teilprojekt. Diese programmatisch in der Wurzel getan werden könnte build.gradle

subprojects { 
    apply plugin: 'java' 
} 

oder in jeder der subproject\build.gradle

apply plugin: 'java' 

Weiterführende Literatur siehe multi project builds und die java plugin