2017-07-19 8 views
0

Ich weiß, dass Bazel keine bestimmte Dateistruktur auferlegt, aber es gibt einige Ordnerbenennungskonventionen, die Produkte mit Bazel folgen, und einige von ihnen (zB "third_party") haben eine spezielle Behandlung (es erfordert die licenses angegeben werden).Bazel Ordner Namenskonvention

Also verstehe ich nicht ganz den Unterschied zwischen tools und third_party. Zum Beispiel, wenn ich eine "Ruby Toolchain" setzen möchte, ist es ein Werkzeug, da es der Sprachinterpreter ist, aber es ist auch eine dritte Partei, weil es von einer Gemeinschaft entwickelt wurde. Wohin soll es gehen?

Und was ist mit Bazel-Regeln? Wo sollte das idiomatisch platziert werden?

Antwort

2

Ich bin ein Bazel-Entwickler, und ich stimme zu, die Verwendung hier kann ein wenig verwirrend sein.

Im Allgemeinen empfehlen wir, dass third_party für jeden externen Code verwendet wird, den Sie importieren, um ihn in Ihrem Projekt zu verwenden. Bazel selbst hat zum Beispiel viele Bibliotheken für Python-Flag-Parsing, Java-Kompilierung und viele andere Dinge.

Werkzeuge hingegen sind Code, den Sie geschrieben haben, um Ihr Projekt als eigenständiges Programm zu unterstützen. Wenn Sie zum Beispiel ein Skript geschrieben haben, das eine statische Textdatei in Code umwandelt (vielleicht können Sie auf die Daten als In-Sprache-Konstanten zugreifen), würde ich sagen, dass es in Tools gehen könnte, da es ein Standalone ist, aber nützlich für Ihre Projekt.

(Beachten Sie, Bazel Tools-Verzeichnis ist ein bisschen anders als das: wir packen diese tatsächlich und enthalten sie in der Bazel-Binärdatei, so dass sie zur Laufzeit, nicht zur Build-Zeit verwendet werden können).

Wenn Sie benutzerdefinierte Skylark-Regeln schreiben, können Sie das überall hin mitnehmen, aber ich möchte Sie bitten, dass Sie, wenn Sie denken, dass sie über Ihr Projekt hinaus nützlich sind, ein separates Repository für sie erstellen kann sie benutzen. Es ist viel einfacher, benutzerdefinierte Regeln aus einem dedizierten Repository zu verwenden, da Sie nur die http_archive() - Regel in einem WORKSPACE verwenden müssen, um sie zu erhalten. Wenn sie mit dem Rest Ihres Projekts gemischt sind, ist es für andere Menschen schwieriger, sie wiederzuverwenden.

+0

Vielen Dank für die klare Erklärung. Es ergibt Sinn für mich. Ich habe einige Google-Projekte inspiziert, um das besser zu verstehen. Da ich das Glück hatte, einen Bazel-Entwickler zu finden, kann ich schnell nach einer bestehenden Lösung für 'pkg_tar' fragen, die .runfiles ignoriert. Ich habe Bazel lokal geklont, um den Quellcode zu modifizieren, da ich außer dem Bug # 671 auf deinem BT kein Glück hatte, aber vielleicht gibt es schon eine Lösung. Ansonsten werde ich dort ein Ticket eröffnen. – CodeShining

+0

Ich weiß nichts über das Problem der Runfiles. Es sieht so aus, als ob Arbeit zu Problem # 671 passierte, du könntest einen Blick auf die Pull-Anfrage # 2687 (https://github.com/bazelbuild/bazel/pull/2687) werfen und sehen, ob du damit angefangen hast. –