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.
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
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. –