题 CMake编译java代码


是否可以使用CMake编译和运行java代码?

从命令行,我在终端上写的命令是:

javac -classpath theClasspath mainClass.java

java -classpath theClasspath mainClass

如果是这样,你能否告诉我如何实现这一目标?

PS:我不想生成jar文件;只是为了编译java类,如果可能的话,运行它。

谢谢。

更新:我已经改变了命令。我不知道为什么没有显示其他文字。可能是因为我使用了“<”和“>”。


16
2017-09-24 15:24


起源


目前还不清楚你曾经尝试过什么,或者你现在用什么来编译。你给出的命令本身是不完整的。 - Jon Skeet
通常要编译java,你会这样做: javac SomeJavaSourceFile.java 这会产生你的 .class 文件。然后运行它,: java SomeJavaSourceFile < - 通知我离开了 .class 部分。 - SnakeDoc
嗨,谢谢你的回复。但是,我在问是否可以使用CMake编译和运行java类 - STiGMa
为什么你会这样做...蚂蚁或maven有什么问题? - texasbruce
因为我试图将用Java编写的工具集成到用C ++编写的另一个工具中。为了做到这一点,我编写了一个绑定类来实例化JVM,找到主java类并调用所需的java方法。现在,我需要找到我需要编写的代码来编译所有内容以及在哪里插入它以编译整个项目。我使用简单的makefile和shell脚本完成了这个。但是,核心工具(C ++软件)使用CMake构建可执行文件。 - STiGMa


答案:


CMake对编译Java代码和执行Java类文件的支持有限。

标准模块 FindJava 可用于查找本地计算机上安装的JDK。标准模块 UseJava 为Java提供了一些函数。其中有一个功能 add_jar 将Java源文件编译为jar文件。

这是一个演示如何使用的小例子 add_jar。给出Java示例源文件 HelloWorld.java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

以下CMake列表文件将编译 HelloWorld.java 到一个jar文件 HelloWorld.jar 并添加一个运行jar与JVM的CMake测试:

cmake_minimum_required (VERSION 2.8)

find_package(Java REQUIRED)
include(UseJava)

enable_testing()

project (HelloWorld)

set(CMAKE_JAVA_COMPILE_FLAGS "-source" "1.6" "-target" "1.6")

add_jar(HelloWorld HelloWorld.java)

get_target_property(_jarFile HelloWorld JAR_FILE)
get_target_property(_classDir HelloWorld CLASSDIR)

message(STATUS "Jar file ${_jarFile}")
message(STATUS "Class compiled to ${_classDir}")

add_test(NAME TestHelloWorld COMMAND ${Java_JAVA_EXECUTABLE} -cp ${_jarFile} HelloWorld)

CMake变量 CMAKE_JAVA_COMPILE_FLAGS 可用于指定编译标志。作为一个副作用 add_jar 命令将设置目标属性 JAR_FILE 和 CLASSDIR 可用于分别获取生成的jar文件和已编译的类文件目录的路径。


24
2017-09-24 20:53