Я пытаюсь перенести проект Maven в Bazel и испытывая проблемы с улучшением Datanucleus.Улучшение Datanucleus с Bazel
После jar
-файл построен, Datanucleus просматривает его и выполняет некоторые манипуляции с байт-кодом для улучшения устойчивых классов. Способ выполнения этого в Bazel заключается в определении правила, которое принимает вывод *.jar
вывода java_library
и создает новую улучшенную версию библиотеки.
Проблема, которая у меня есть, заключается в том, что для моего правила мне нужен datanucleus-core
пакет из внешних библиотек. При попытке доступа к нему из genrule
по $(location //third_party:datanucleus_core)
она указывала на банку, который не имеет никаких классов:
(genrule) cmd = "echo $(location //third_party:datanucleus_core)"
bazel-out/local-fastbuild/bin/third_party/liborg_datanucleus_datanucleus_core.jar
(genrule) cmd = "jar tf $(location //third_party:datanucleus_core)"
META-INF/
META-INF/MANIFEST.MF
jar
-file разрешаться Базеле в genrule
из $(location //third_party:datanucleus_core)
содержит только META-INF/MANIFEST.MF
со следующим содержанием:
Manifest-Version: 1.0
Created-By: blaze
Я попытался использовать правило java_binary
, которое добавляет правильный путь datanucleus_core.jar
в путь к классам, но Datanucleus расширяет мою библиотеку на месте и не может записать свои изменения на диске (переписать входной файл правила). Также правило java_binary
не должно использоваться для строительства.
Итак, вопрос в том, что является лучшим способом для повышения библиотеки jar
в Bazel, использующей утилиту Datanucleus, которая предоставляется в качестве сторонней зависимости в репозитории Maven?
Базэл строить этикетки: 0.3.2-homebrew
, ОС: OS X El Capitan (10.11.6)
, Java: 1.8.0_92
Update
объявления зависимостей DataNucleus:
# WORKSPACE
maven_jar(
name = "org_datanucleus_datanucleus_core",
artifact = "org.datanucleus:datanucleus-core:5.0.3",
)
# third_party/BUILD
java_library(
name = "org_datanucleus_datanucleus_core",
visibility = ["//visibility:public"],
exports = ["@org_datanucleus_datanucleus_core//jar"],
)
(на мой вопрос, который я укоротить org_datanucleus_datanucleus_core
к datanucleus_core
)
Никакой процесс улучшения не улучшит классы * IN A JAR *. Если это то, что вы делаете ... Вам нужно распаковать, улучшить, упаковать их. –