调用bazel构建的java程序的原始命令行是什么?

问题描述 投票:0回答:1

bazel构建了cpp / java程序,并使用非常复杂的bazel包装器运行它们。我希望我不依赖这种bazel包装器,因为我想要一个干净的运行时/安装包。这是我的“BUILD”中的一个简单的java示例

java_binary(
    name = "hello",
    srcs = ["src/main/java/com/demo/DemoRunner.java"],
    main_class = "com.demo.DemoRunner",
    deps = [":HelloTest"],
)

java_library(
    name = "HelloTest",
    srcs = ["src/main/java/com/demo/Hello.java"],
    visibility = ["//src/main/java/com/demo/child:__pkg__"],
)

我可以“bazel build hello”和“bazel run hello”,没问题。但当我尝试时:

# java -classpath bazel-bin/hello.jar com.demo.DemoRunner
Exception in thread "main" java.lang.NoClassDefFoundError: com/demo/Hello
    at com.demo.DemoRunner.main(DemoRunner.java:4)
Caused by: java.lang.ClassNotFoundException: com.demo.Hello
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

我的要求就是用原始命令行运行bazel build jar。如何纠正我的命令,我想我必须设置一些类路径或环境变量?

请帮忙。非常感谢。

java class runtime classpath bazel
1个回答
1
投票

你可能想要java -jar隐含的_deploy.jar输出。

$ bazel build //:hello_deploy.jar && java -jar bazel-bin/hello_deploy.jar

© www.soinside.com 2019 - 2024. All rights reserved.