代码之家  ›  专栏  ›  技术社区  ›  Hind Forsum

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

  •  0
  • Hind Forsum  · 技术社区  · 5 年前

    bazel构建了cpp/java程序,并使用非常复杂的bazel包装器运行它们。我希望我不要依赖这种bazel包装,因为我想要一个干净的运行时/安装包。下面是我的“构建”中的一个简单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构建的jar。如何更正我的命令,我想我必须设置一些类路径或环境变量?

    请帮忙。谢谢。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Jin    5 年前

    你可能会想 java -jar 含蓄的 _deploy.jar 输出

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