CMake编译Java代码

24

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

在命令行中,我输入以下命令:

javac -classpath theClasspath mainClass.java

java -classpath theClasspath mainClass

如果可以的话,请给我一个实现的思路。

注:我不想生成一个jar文件;只需要编译Java类并尽可能地运行它。

谢谢。

更新:我已更改命令。我不知道为什么附加的文本没有显示出来。这可能是因为我使用了"<"和">"符号。


你并没有说明你尝试了什么,或者目前使用的是什么编译器。你所给出的命令本身是不完整的。 - Jon Skeet
通常编译Java代码的命令是:javac SomeJavaSourceFile.java,这将生成.class文件。然后运行它的命令是:java SomeJavaSourceFile <-- 注意我省略了.class部分。 - SnakeDoc
嗨,感谢回复。不过,我想问的是是否可能使用CMake编译和运行Java类。 - STiGMa
你为什么要这样做...Ant或Maven有什么问题吗? - SwiftMango
4
因为我正在尝试将一种用Java编写的工具集成到另一个用C++编写的工具中。为此,我编写了一个绑定类,它实例化JVM,找到主Java类并调用所需的Java方法。现在,我需要找出我需要编写哪些代码才能将所有内容编译在一起,以及在哪里插入它以编译整个项目。我使用了简单的makefile和shell脚本来完成这项任务。但是核心工具(C++软件)使用CMake来构建可执行文件。 - STiGMa
1个回答

39

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,并添加一个运行JVM的CMake测试:
cmake_minimum_required (VERSION 2.8)

find_package(Java REQUIRED)
include(UseJava)

enable_testing()

project (HelloWorld NONE)

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_FILECLASSDIR,可以使用它们分别获取生成的jar文件的路径和已编译类文件的目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接