CMake для компиляции java-кода

Можно ли использовать CMake для компиляции и запуска java-кода?

В командной строке команды, которые я пишу на терминале:

javac -classpath theClasspath mainClass.java

java -classpath theClasspath mainClass

Если да, не могли бы вы дать мне представление о том, как это можно достичь?

PS: Я не хочу генерировать файл jar; просто для компиляции класса java и, если возможно, его запуска.

Спасибо.

Обновить. Я изменил команду. Я не знаю, почему дополнительный текст не отображался. Возможно, это потому, что я использовал "<" и " > ".

Ответы

Ответ 1

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, а также добавить тест CMake, который запускает банку с JVM:

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 и файлу файлов скомпилированных классов соответственно.