2017-09-11 1 views
0

Ich habe ein Multi-Projekt gradle Projekt mit folgenden Verzeichnisstruktur:Gradle - Wege in Multi-Projekt bauen

+ project_root 
    + module1 
     + src 
     build.gradle 

    + module2 
     + src 
     build.gradle 

    + web 
     .. 

    build.gradle 
    settings.gradle 

In module1/build.gradle unter anderem ich angegeben haben:

compileKotlin2Js.kotlinOptions { 
    outputFile = "web/script.js" 
} 

Es ist ein Spezielle Einstellung für Kotlin JS, die den Pfad der Ausgabedatei der kompilierten JS-Datei angibt.

Nun mein Problem ist, dass, wenn ich das ganze Projekt bauen (project_root/build.gradle) die Datei im richtigen Verzeichnis endet (project_root/web), aber wenn ich aus Versehen auf das Modul aufbauen laufe allein die Datei in Modulverzeichnis gespeichert (project_root/module1/web).

Wie kann ich Pfade in meinen Build-Skripten fixieren, so wird die Dateiausgabe in genau demselben Verzeichnis gespeichert, egal welches Build-Skript ich ausführe (ohne Angabe des vollständigen Pfads, ich möchte einen relativen Pfad)?

Antwort

1

Ich weiß nicht, was Gradle-Plugin den Pfadparameter in Ihrem Codebeispiel erfordert, aber alle regulären (Nicht-3rd-Party) Gradle Plugins bewerten Pfadparameter über Project.files(Object...), um verschiedene Standorte beim Aufruf von Gradle aus verschiedenen Arbeitsverzeichnissen zu vermeiden.

Ich würde vorschlagen, die obige Methode (oder seine einzelne Datei Version Project.file(Object)) auch zu verwenden. Sie können sogar den project Teil weglassen, weil die build.gradle Datei im Projektumfang ausgeführt wird:

compileKotlin2Js.kotlinOptions { 
    outputFile = file('web/script.js') 
} 

Dadurch wird den Pfad relativ zum Projektverzeichnis des Projektes Sie zu build.gradle gehören immer bewerten. Um eine Datei relativ zum Projektverzeichnis des Stammprojekts auszuwerten, verwenden Sie rootProject.files(Object...), verwenden Sie für einen Pfad relativ zum Projektverzeichnis eines Teilprojekts oder eines beliebigen Projekts im Build project(':path:to:project').files(Object...).