2016-10-16 4 views
0

Ich bin neu zu verwenden pantsbuild und ich kann nicht scheinen, um gute Fragen, Antworten oder Dokumentation um meine Dillema zu finden.Teilprojekt Abhängigkeiten in Hosen

Ich habe ein Pants-Projekt, das für sich selbst gebaut werden sollte. Es hat seine eigene pants und pants.ini Datei sowie alle BUILD Dateien mit Pfaden relativ zum Projektstamm (wo pants.ini ist). Dieses Projekt wird auf GitHub gehostet.

Ich möchte dieses Projekt als Abhängigkeit in einem zweiten Projekt verwenden. Ich habe mich dafür entschieden, git Submodule zu verwenden. Nun, ich ein Layout wie das folgende haben:

path 
├── pants 
├── pants.ini 
├── projectA 
│   └── src 
│    └── python 
|   └── main 
│      ├── BUILD 
│      └── main.py 
└── projectB 
    ├── pants 
    ├── pants.ini 
    └── src 
     └── python 
      ├── libA 
      | ├── BUILD 
      | └── lib.py 
      └── libB 
       ├── BUILD 
       └── lib.py 

Natürlich, ich suche ProjectB der BUILD Ziele aus projectA, so in projectA zu gebrauchen BUILD, ich habe etwas Derartiges:

dependencies = [ "projectB/src/python:libA" ] 

Das ist alles gut und gut. Da jedoch ProjectB ein unabhängiges Projekt, es ist src/python/libA/BUILD Datei etwas Derartiges enthält:

dependencies = [ "src/python:libB" ] 

Aus diesem Grund kann ProjectB zwar unabhängig gebaut werden. Wenn jedoch versucht projectA, die Build-Ziele von ProjectB Suche von projectA Projektwurzel, zum Beispiel beginnen zu bauen:

Exception Message: libB was not found in BUILD files from path/src/python 

Hat jede saubere Art und Weise, dieses Teilprojekt Abhängigkeiten pantsbuild zu behandeln? Oder würde ich gezwungen sein, die BUILD-Dateien des Teilprojekts zu ändern, um sie in mein Projektlayout einzupassen (wodurch das Projekt unabhängig davon unbuiltable wird)?

Jede Lösung oder Beratung ist willkommen!

Antwort

0

So stellt sich heraus, dass die Funktionalität, auf die ich gehofft hatte, nicht von Hosen unterstützt wurde. Zuerst folgte ich dem Rat eines Yi Cheng in den Kommentaren und erstellte ein Skript, um alle Teilprojekt-BUILD-Regeln durch solche zu ersetzen, die sich auf das Root-Projekt beziehen. Dieses Skript kann hier gefunden werden: https://github.com/brandonio21/pants-subproject-prep

Das Skript war ziemlich begrenzt, und war weit von einer praktikablen Lösung. Ich habe seitdem die Hose stromaufwärts gewechselt, um das Verhalten zu unterstützen. Die PR war hier: https://github.com/pantsbuild/pants/pull/4088

Nun, wenn Sie ein Teilprojekt in einem anderen Hose Projekt, den Bau das Stammprojektes mit --subproject-roots=["path/to/subproject1_root", "path/to/subproject2_root"] (oder der Option in pants.ini Angabe) wird das Teilprojekt aus der richtigen Teilprojekt Wurzel

0

Das ist alles gut und gut. Da jedoch projectA ein unabhängiges Projekt, es ist src/Python/Liba/BUILD-Datei etwas Derartiges enthält:

Abhängigkeiten = [ "src/Python: libb"]

iiuc src/python:libB muss projectB/src/python:libB sein. Alle Zielpfade im Repo sollten relativ zum Build-Stamm sein, der in Ihrem Beispiel path ist.

+0

Dies ist bauen richtig.Damit das Projekt ordnungsgemäß funktioniert, sollte ProjectB/src/python/libA/BUILD 'dependencies = [" projectB/src/python: libB "]' – brandonio21

+0

Woops enthalten, gedrückte Eingabetaste zu früh. Mein Punkt ist jedoch, Projekt B ist ein unabhängiges Projekt. Ich möchte, dass es für sich selbst gebaut werden kann, ohne dass man weiß, dass es sich um ein anderes Projekt handelt. – brandonio21

+0

Es wurde gerade bemerkt, dass es zwei Sets von "hose" und "pants.ini" gibt, aber nur eine sollte in der Build-Wurzel erlaubt sein. z.B. In ProjectB müssten Sie die Zielpfade w.r.t in den neuen Build-Root konvertieren. Das Verhalten ist auch hier funky, weil Hose bestimmt Build Root basierend auf wo 'Hose' ausführbare Datei befindet. –

Verwandte Themen