UseJava: add INCLUDE_MODULES argument to add_jar

Arguments are added to the dependencies list, and to the "--module-path"
passed to javac, which is only generated for adequate JDK versions.
This commit is contained in:
Javier Martín
2025-10-14 18:23:21 +02:00
parent b3365e7c57
commit 343ee5b9ee
15 changed files with 257 additions and 13 deletions
@@ -0,0 +1,13 @@
project(foo Java)
cmake_minimum_required(VERSION 3.10)
set(CMAKE_VERBOSE_MAKEFILE 1)
find_package(Java COMPONENTS Development)
include(UseJava)
add_jar(${PROJECT_NAME} Foo.java module-info.java)
export_jars(
TARGETS ${PROJECT_NAME}
NAMESPACE foo::
FILE JavaBuildExportTestConfig.cmake)
@@ -0,0 +1,13 @@
package org.foo;
public class Foo
{
public Foo()
{
}
public void printName()
{
System.out.println("Foo");
}
}
@@ -0,0 +1,3 @@
module mod_foo {
exports org.foo;
}
+105
View File
@@ -0,0 +1,105 @@
cmake_minimum_required(VERSION 3.10)
project(JavaModExportImport)
if(NOT DEFINED CMake_TEST_NESTED_MAKE_PROGRAM AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
set(CMake_TEST_NESTED_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM}")
endif()
find_package(Java COMPONENTS Development)
# Wipe out the install tree to make sure the exporter works.
add_custom_command(
OUTPUT ${JavaModExportImport_BINARY_DIR}/CleanupProject
COMMAND ${CMAKE_COMMAND} -E rm -rf ${JavaModExportImport_BINARY_DIR}/Root
)
add_custom_target(CleanupTarget ALL DEPENDS ${JavaModExportImport_BINARY_DIR}/CleanupProject)
set_property(
SOURCE ${JavaModExportImport_BINARY_DIR}/CleanupProject
PROPERTY SYMBOLIC 1
)
get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(_isMultiConfig)
set(NESTED_CONFIG_TYPE -C "${CMAKE_CFG_INTDIR}")
else()
if(CMAKE_BUILD_TYPE)
set(NESTED_CONFIG_TYPE -C "${CMAKE_BUILD_TYPE}")
else()
set(NESTED_CONFIG_TYPE)
endif()
endif()
configure_file(${JavaModExportImport_SOURCE_DIR}/InitialCache.cmake.in
${JavaModExportImport_BINARY_DIR}/InitialCache.cmake @ONLY)
# Build the build exporter.
add_custom_command(
OUTPUT ${JavaModExportImport_BINARY_DIR}/BuildExportProject
COMMAND ${CMAKE_CTEST_COMMAND} ${NESTED_CONFIG_TYPE}
--build-and-test
${JavaModExportImport_SOURCE_DIR}/BuildExport
${JavaModExportImport_BINARY_DIR}/BuildExport
--build-noclean
--build-project BuildExport
--build-generator ${CMAKE_GENERATOR}
--build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
--build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
--build-options -C${JavaModExportImport_BINARY_DIR}/InitialCache.cmake
VERBATIM
)
add_custom_target(BuildExportTarget ALL DEPENDS ${JavaModExportImport_BINARY_DIR}/BuildExportProject)
add_dependencies(BuildExportTarget CleanupTarget)
set_property(
SOURCE ${JavaModExportImport_BINARY_DIR}/BuildExportProject
PROPERTY SYMBOLIC 1
)
# Build and install the install exporter.
add_custom_command(
OUTPUT ${JavaModExportImport_BINARY_DIR}/InstallExportProject
COMMAND ${CMAKE_CTEST_COMMAND} ${NESTED_CONFIG_TYPE}
--build-and-test
${JavaModExportImport_SOURCE_DIR}/InstallExport
${JavaModExportImport_BINARY_DIR}/InstallExport
--build-noclean
--build-project InstallExport
--build-target install
--build-generator ${CMAKE_GENERATOR}
--build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
--build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
--build-options -C${JavaModExportImport_BINARY_DIR}/InitialCache.cmake
VERBATIM
)
add_custom_target(InstallExportTarget ALL DEPENDS ${JavaModExportImport_BINARY_DIR}/InstallExportProject)
add_dependencies(InstallExportTarget CleanupTarget)
set_property(
SOURCE ${JavaModExportImport_BINARY_DIR}/InstallExportProject
PROPERTY SYMBOLIC 1
)
# Build and install the importer.
add_custom_command(
OUTPUT ${JavaModExportImport_BINARY_DIR}/ImportProject
COMMAND ${CMAKE_CTEST_COMMAND} ${NESTED_CONFIG_TYPE}
--build-and-test
${JavaModExportImport_SOURCE_DIR}/Import
${JavaModExportImport_BINARY_DIR}/Import
--build-noclean
--build-project Import
--build-generator ${CMAKE_GENERATOR}
--build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
--build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
--build-options
-C${JavaModExportImport_BINARY_DIR}/InitialCache.cmake
-DJavaBuildExportTest_DIR:PATH=${JavaModExportImport_BINARY_DIR}/BuildExport
-DJavaInstallExportTest_DIR:PATH=${JavaModExportImport_BINARY_DIR}/Root/share/cmake
VERBATIM
)
add_custom_target(ImportTarget ALL DEPENDS ${JavaModExportImport_BINARY_DIR}/ImportProject)
add_dependencies(ImportTarget BuildExportTarget InstallExportTarget)
set_property(
SOURCE ${JavaModExportImport_BINARY_DIR}/ImportProject
PROPERTY SYMBOLIC 1
)
add_executable(JavaModExportImport main.c)
add_dependencies(JavaModExportImport ImportTarget)
@@ -0,0 +1,14 @@
project(import Java)
cmake_minimum_required(VERSION 3.10)
set(CMAKE_VERBOSE_MAKEFILE 1)
find_package(Java COMPONENTS Development)
include(UseJava)
find_package(JavaBuildExportTest REQUIRED)
find_package(JavaInstallExportTest REQUIRED)
add_jar(${PROJECT_NAME}
SOURCES Import.java module-info.java
INCLUDE_MODULES foo::foo bar::bar)
@@ -0,0 +1,13 @@
import org.foo.Foo;
import com.bar.Bar;
class Import
{
public static void main(String args[])
{
Foo foo = new Foo();
Bar bar = new Bar();
foo.printName();
bar.printName();
}
}
@@ -0,0 +1,4 @@
module client {
requires mod_foo;
requires mod_bar;
}
@@ -0,0 +1,5 @@
set(CMAKE_MAKE_PROGRAM "@CMake_TEST_NESTED_MAKE_PROGRAM@" CACHE FILEPATH "Make Program")
set(Java_JAVA_EXECUTABLE "@Java_JAVA_EXECUTABLE@" CACHE STRING "Java Interpreter")
set(Java_JAVAC_EXECUTABLE "@Java_JAVAC_EXECUTABLE@" CACHE STRING "Java Compiler")
set(Java_JAR_EXECUTABLE "@Java_JAR_EXECUTABLE@" CACHE STRING "Java Archive Tool")
set(CMAKE_INSTALL_PREFIX "@JavaModExportImport_BINARY_DIR@/Root" CACHE STRING "Installation Prefix")
@@ -0,0 +1,13 @@
package com.bar;
public class Bar
{
public Bar()
{
}
public void printName()
{
System.out.println("Bar");
}
}
@@ -0,0 +1,15 @@
project(bar Java)
cmake_minimum_required(VERSION 3.10)
set(CMAKE_VERBOSE_MAKEFILE 1)
find_package(Java COMPONENTS Development)
include(UseJava)
add_jar(${PROJECT_NAME} Bar.java module-info.java)
install_jar(${PROJECT_NAME} DESTINATION share/java)
install_jar_exports(
TARGETS ${PROJECT_NAME}
NAMESPACE bar::
FILE JavaInstallExportTestConfig.cmake
DESTINATION share/cmake)
@@ -0,0 +1,3 @@
module mod_bar {
exports com.bar;
}
+4
View File
@@ -0,0 +1,4 @@
int main(void)
{
return 0;
}