如何组织第三方java_library规则?
How to organize third-party java_library rules?
我有许多 BUILD
文件需要 Jetty 或其他常见 Java 库(SLF4J、Lucene、Guava 等)。其中每一个都有一组它引用的其他 JAR。我想知道在大型项目中组织这些声明及其依赖项的最佳实践。
例如,通过 bazel run //src/tools/generate_workspace -- --artifact=org.eclipse.jetty:jetty-server:9.3.8.v20160314
使用 generate_workspace
我得到以下结果 BUILD
# The following dependencies were calculated from:
# org.eclipse.jetty:jetty-server:9.3.8.v20160314
java_library(
name = "org_eclipse_jetty_jetty_http",
visibility = ["//visibility:public"],
exports = [
"@org_eclipse_jetty_jetty_http//jar",
"@org_eclipse_jetty_jetty_util//jar",
],
)
java_library(
name = "org_eclipse_jetty_jetty_util",
visibility = ["//visibility:public"],
exports = [
"@org_eclipse_jetty_jetty_util//jar",
],
)
java_library(
name = "javax_servlet_javax_servlet_api",
visibility = ["//visibility:public"],
exports = [
"@javax_servlet_javax_servlet_api//jar",
],
)
java_library(
name = "org_eclipse_jetty_jetty_server",
visibility = ["//visibility:public"],
exports = [
"@org_eclipse_jetty_jetty_server//jar",
"@javax_servlet_javax_servlet_api//jar",
"@org_eclipse_jetty_jetty_http//jar",
"@org_eclipse_jetty_jetty_io//jar",
"@org_eclipse_jetty_jetty_util//jar",
],
)
java_library(
name = "org_eclipse_jetty_jetty_io",
visibility = ["//visibility:public"],
exports = [
"@org_eclipse_jetty_jetty_io//jar",
"@org_eclipse_jetty_jetty_util//jar",
],
)
和WORKSPACE
# The following dependencies were calculated from:
# org.eclipse.jetty:jetty-server:9.3.8.v20160314
# org.eclipse.jetty:jetty-server:jar:9.3.8.v20160314
maven_jar(
name = "org_eclipse_jetty_jetty_http",
artifact = "org.eclipse.jetty:jetty-http:9.3.8.v20160314",
)
# org.eclipse.jetty:jetty-http:jar:9.3.8.v20160314
# org.eclipse.jetty:jetty-io:jar:9.3.8.v20160314
maven_jar(
name = "org_eclipse_jetty_jetty_util",
artifact = "org.eclipse.jetty:jetty-util:9.3.8.v20160314",
)
# org.eclipse.jetty:jetty-server:jar:9.3.8.v20160314
maven_jar(
name = "javax_servlet_javax_servlet_api",
artifact = "javax.servlet:javax.servlet-api:3.1.0",
)
maven_jar(
name = "org_eclipse_jetty_jetty_server",
artifact = "org.eclipse.jetty:jetty-server:9.3.8.v20160314",
)
# org.eclipse.jetty:jetty-server:jar:9.3.8.v20160314
maven_jar(
name = "org_eclipse_jetty_jetty_io",
artifact = "org.eclipse.jetty:jetty-io:9.3.8.v20160314",
)
个文件。
我在很多项目中都依赖于 jetty-server 和 jetty-util。有没有比在每个 BUILD
文件中重复此信息更好的做法?
通常,您会将 generate_workspace
生成的 BUILD 文件放在工作空间的根目录中(在您的 WORKSPACE 文件旁边),然后在其他 BUILD 文件中,您将引用它们需要的任何目标取决于。例如,在 src/main/java/com/your-project/subcomponent/BUILD 中,您可以说:
java_library(
name = "my-servlet",
srcs = glob(["*.java"]),
deps = [
"//:javax_servlet_javax_servlet_api",
# other deps...
],
)
我有许多 BUILD
文件需要 Jetty 或其他常见 Java 库(SLF4J、Lucene、Guava 等)。其中每一个都有一组它引用的其他 JAR。我想知道在大型项目中组织这些声明及其依赖项的最佳实践。
例如,通过 bazel run //src/tools/generate_workspace -- --artifact=org.eclipse.jetty:jetty-server:9.3.8.v20160314
使用 generate_workspace
我得到以下结果 BUILD
# The following dependencies were calculated from:
# org.eclipse.jetty:jetty-server:9.3.8.v20160314
java_library(
name = "org_eclipse_jetty_jetty_http",
visibility = ["//visibility:public"],
exports = [
"@org_eclipse_jetty_jetty_http//jar",
"@org_eclipse_jetty_jetty_util//jar",
],
)
java_library(
name = "org_eclipse_jetty_jetty_util",
visibility = ["//visibility:public"],
exports = [
"@org_eclipse_jetty_jetty_util//jar",
],
)
java_library(
name = "javax_servlet_javax_servlet_api",
visibility = ["//visibility:public"],
exports = [
"@javax_servlet_javax_servlet_api//jar",
],
)
java_library(
name = "org_eclipse_jetty_jetty_server",
visibility = ["//visibility:public"],
exports = [
"@org_eclipse_jetty_jetty_server//jar",
"@javax_servlet_javax_servlet_api//jar",
"@org_eclipse_jetty_jetty_http//jar",
"@org_eclipse_jetty_jetty_io//jar",
"@org_eclipse_jetty_jetty_util//jar",
],
)
java_library(
name = "org_eclipse_jetty_jetty_io",
visibility = ["//visibility:public"],
exports = [
"@org_eclipse_jetty_jetty_io//jar",
"@org_eclipse_jetty_jetty_util//jar",
],
)
和WORKSPACE
# The following dependencies were calculated from:
# org.eclipse.jetty:jetty-server:9.3.8.v20160314
# org.eclipse.jetty:jetty-server:jar:9.3.8.v20160314
maven_jar(
name = "org_eclipse_jetty_jetty_http",
artifact = "org.eclipse.jetty:jetty-http:9.3.8.v20160314",
)
# org.eclipse.jetty:jetty-http:jar:9.3.8.v20160314
# org.eclipse.jetty:jetty-io:jar:9.3.8.v20160314
maven_jar(
name = "org_eclipse_jetty_jetty_util",
artifact = "org.eclipse.jetty:jetty-util:9.3.8.v20160314",
)
# org.eclipse.jetty:jetty-server:jar:9.3.8.v20160314
maven_jar(
name = "javax_servlet_javax_servlet_api",
artifact = "javax.servlet:javax.servlet-api:3.1.0",
)
maven_jar(
name = "org_eclipse_jetty_jetty_server",
artifact = "org.eclipse.jetty:jetty-server:9.3.8.v20160314",
)
# org.eclipse.jetty:jetty-server:jar:9.3.8.v20160314
maven_jar(
name = "org_eclipse_jetty_jetty_io",
artifact = "org.eclipse.jetty:jetty-io:9.3.8.v20160314",
)
个文件。
我在很多项目中都依赖于 jetty-server 和 jetty-util。有没有比在每个 BUILD
文件中重复此信息更好的做法?
通常,您会将 generate_workspace
生成的 BUILD 文件放在工作空间的根目录中(在您的 WORKSPACE 文件旁边),然后在其他 BUILD 文件中,您将引用它们需要的任何目标取决于。例如,在 src/main/java/com/your-project/subcomponent/BUILD 中,您可以说:
java_library(
name = "my-servlet",
srcs = glob(["*.java"]),
deps = [
"//:javax_servlet_javax_servlet_api",
# other deps...
],
)