我正在用一种主要方法构建一个非常简单的jar。我已经有了Kotlin规则,并且可以很好地构建jar:
kt_jvm_binary(
name = "myapp",
main_class = "MainKt",
srcs = ["src/main/kotlin/Main.kt"]
)
但是,该main_class
参数不会在清单中添加任何内容来允许我运行jar(我假设bazel-bin文件夹中的那个是正确的)。
我试过使用一个库,然后使用java_binary
规则编译它:
kt_jvm_library(
name = "myapp_lib",
srcs = ["src/main/kotlin/Main.kt"]
)
java_binary(
name = "myapp",
main_class = "MainKt",
visibility = ["//visibility:public"],
runtime_deps = [":myapp_lib"],
deploy_manifest_lines = ["Main-Class: MainKt"]
)
现在我有两个罐子。仅具有清单的myapp.jar和具有类文件的myapp_lib.jar。无论我是否包含该deploy_manifest_lines
参数,它们都不在清单中有主类。
如何使用允许我运行它的主类构建非常简单的jar?
(请注意,我将使用台式机和TornadoFX,而不是Android。)
Bazel中的很多东西都不是“神奇的”,这就是一个例子。“ main_class”并不影响包装,它可以告诉bazel * _binary规则如何执行,因此可以执行bazel run //path/to/my/binary:target
。它不影响包装。随你(由你决定。您将添加自己的meta-inf信息,并确保resources=
提取包装元数据中的内容。
部分原因是因为Bazel不会(默认情况下)创建“可执行jar”,而是构建一个包装脚本,您执行该包装脚本以使用jar调用jvm。
您的第二个示例应该可以工作...您没有找到合适的罐子。实际上具有所有部署位的jar应该是:myapp_deploy.jar
包含所有“上游” deps的类,以及所有meta-inf内容,所有这些都烘焙到单个jar中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句