mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
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:
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
int main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user