#java #maven #bazel
#java #мавен #bazel
Вопрос:
Я создал плагин для его запуска во время компиляции модулей maven. Но поскольку моя организация сейчас переходит на bazel — есть ли у нас способ напрямую запускать плагины (mojos) в bazel?
Если нет, есть ли способ во время сборки Java-кода в базеле, чтобы мы могли вызвать другой java-код, который содержит всю информацию о проекте, как MavenProject
параметр в mojos?
Комментарии:
1. Что делает ваш плагин?
2. Какой плагин связан с модулями maven:
I made a plugin to run it during compilation of maven modules
? Я сомневаюсь, что вы можете выполнить mojo в Bazel, потому что, насколько я знаю, bazel в основном реализован на C / C ?3. В частности, изменяет ли ваш плагин или генерирует файлы?
4. Он генерирует файл.
Ответ №1:
Вы можете использовать a genrule
с java_binary
для вашего плагина как tool
. Что — то вроде этого:
java_binary(
name = "my_plugin",
...
)
genrule(
name = "run_plugin",
srcs = [],
cmd = "$(location my_plugin) > "$@"",
outs = ["plugin_output"],
tools = [":my_plugin"],
)
В этом примере вы должны иметь возможность запускать свой плагин с bazel build :plugin_output
помощью .
Комментарии:
1. Я хочу получить classloader модуля, выполняющего его (urlclassloader тоже работает, но мне нужно знать зависимости модуля от времени выполнения). Может ли genrule предоставить мне это?
2. Этот пример просто выполняет ваш плагин с
java -jar
помощью from genrule, поэтому, я думаю, он даст вам все, чтоjava -jar
обычно дает вам.3. Тогда не могли бы вы уточнить еще кое-что? Вам нужны зависимости от времени выполнения какого модуля? Тот, на который действует ваш плагин, или сам плагин? Достаточно ли знать Bazel
deps
? Вы говорите о модулях Java 9 или о какой-то другой концепции?4. Это могло бы помочь, если бы вы также могли поделиться назначением плагина.
5. Я использую java 8. По сути, я хочу, чтобы все зависимости времени выполнения использовали отражение для всех модулей, а затем генерировали несколько файлов на основе классов, имеющих аннотации.
Ответ №2:
Похоже , то , что вы , возможно , захотите попробовать , — это a java_plugin
, предназначенный для запуска процессоров аннотаций с java_binary
помощью and java_library
: https://docs.bazel.build/versions/master/be/java.html#java_plugin
и вы указываете плагин с plugins
атрибутом java_binary
or java_library
: https://docs.bazel.build/versions/master/be/java.html#java_binary.plugins
java_binary(
name = ...,
srcs = ...,
deps = ...,
plugins = [":my_plugin"],
)
java_plugin(
name = "my_plugin",
srcs = ...,
deps = ...,
processor_class = "...",
)