Bazel构建了CPP/Java程序,并使用非常复杂的Bazel包装器运行它们。我希望我不要依靠这种巴泽尔包装纸,因为我想要一个干净的运行时/安装程序包。这是我的" build"
中的一个简单的爪哇示例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"one_answers" 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
我的要求只是运行带有RAW命令行的Bazel构建的Jar。如何纠正我的命令,我想我必须设置一些class路径或环境变量?
请帮忙。非常感谢。
您可能需要java -jar
隐式_deploy.jar
输出。
$ bazel build //:hello_deploy.jar && java -jar bazel-bin/hello_deploy.jar
。