如何为使用Bazel构建的Kotlin jar将主类添加到MANIFEST.MF?

鲁尼沃尔

我正在用一种主要方法构建一个非常简单的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将jar添加到引导类路径中的Java 9

什么是MANIFEST.MF中的清单版本?

如何获取Java MANIFEST.MF以包括Maven版本号

使用JAVA从jar文件读取MANIFEST.MF文件

如何在WAR应用程序中阅读MANIFEST.MF?

在Java中使用MANIFEST.MF文件

Manifest.mf文件查看器?

如何验证jar中MANIFEST.MF的顺序?

如何在Eclipse中使用自己的MANIFEST.MF来构建jar

相当于Android MANIFEST.MF

如何在MANIFEST.MF文件中包含org.json.jar和org.json。*导入

如何修改mvn.cmd以在MANIFEST.MF文件中获取正确的jdk构建版本

Gradle重复项输入错误:META-INF / MANIFEST.MF(或如何从jar中删除文件)

使用Spring Boot Maven插件构建jar时如何在manifest.mf中添加Classpath属性

MANIFEST.MF Tomcat的主类无效

自动生成manifest.mf时如何管理导入和导出软件包

通过sbt组装进行构建时保留Manifest.mf

将生成的类捆绑到jar中,并将其添加到构建类路径中

Java“ .jar找不到主类”,即使它是用manifest.mf编写的

如何将MANIFEST.MF中的Class-Path设置为自定义类路径?

如何编辑META-INF / MANIFEST.mf

使用Java读取War文件中的Manifest.mf

使用 MANIFEST.MF 时排除 jboss AS 7 (EAP 6) 中的模块依赖项

Java:我自己的 MANIFEST.MF 文件在 maven 构建的 jar 中不起作用

cmake java 演示项目无法使用我的 MANIFEST.MF 创建“jar”

如何将主构造函数添加到具有类型约束的泛型类?

Maven 未在 MANIFEST.MF 中生成主类条目

文件“root/lib/META-INF/MANIFEST.MF”使用保留文件或目录名称“lib”

Bazel 默认添加 -MD -MF -frandom-seed 标志 - 为什么?