MantisBT - CMake
View Issue Details
0001123CMakeCMakepublic2004-08-31 16:052016-06-10 14:30
Douglas Gregor 
Bill Hoffman 
lowmajoralways
closedmoved 
 
 
0001123: ADD_JAVA_LIBRARY does not support multiple .java files or package hierarchies
Attempting to use ADD_JAVA_LIBRARY with multiple .java files and with .java files stored in subdirectories does not produce the desired results, e.g.,

ADD_JAVA_LIBRARY(bgl
  edu/iu/osl/bgl/Graph.java edu/iu/osl/bgl/GraphMLPersister.java)

Ideally, this would compile both .java files and place all of the class files into bgl.jar, retaining the directory structure (e.g., Graph.class is in subdirectory edu/iu/osl/bgl). The result with CMake 2.0.3 is that only the first .java file is compiled but the Jar file ends up emplty.

The following patch (against CMake 2.0.3) solves both problems, and has been tested on Windows XP and MacOS X Panther (10.3).

--- /u/dgregor/Desktop/cmake-2.0.3/Modules/CMakeJavaCompiler.cmake.in Thu Dec 26 19:59:21 2002
+++ /u/dgregor/CMakeJavaCompiler.cmake.in Mon Aug 30 15:06:05 2004
@@ -30,31 +30,40 @@
     ADD_CUSTOM_TARGET(${LIBRARYNAME}_target ALL)
 
     SET(CMAKE_JAVA_ALL_CLASS_FILES "")
- FOREACH(SOURCE ${SOURCES})
- GET_FILENAME_COMPONENT(CLASS_FILE ${SOURCE} NAME_WE)
- ADD_CUSTOM_COMMAND(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}
- COMMAND ${CMAKE_JAVA_COMPILER}
- ARGS ${CMAKE_JAVA_COMPILE_FLAGS}
- -classpath ${CMAKE_JAVA_INCLUDE_PATH_TOTAL}
- ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}
- -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/
- TARGET ${LIBRARYNAME}_target
- OUTPUTS ${CLASS_FILE}.class
- COMMENT "Java File" )
- SET(CMAKE_JAVA_ALL_CLASS_FILES ${CMAKE_JAVA_ALL_CLASS_FILES} ${CLASS_FILE}.class)
+ SET(CMAKE_JAVA_ALL_CLASS_FILE_PATHS "")
+ SET(SKIP 1)
+ FOREACH(SOURCE ${ARGV})
+ IF(SKIP)
+ SET(SKIP 0)
+ ELSE(SKIP)
+ GET_FILENAME_COMPONENT(CLASS_FILE_PATH ${SOURCE} PATH)
+ GET_FILENAME_COMPONENT(CLASS_FILE_NAME ${SOURCE} NAME_WE)
+ SET(CLASS_FILE "${CLASS_FILE_PATH}/${CLASS_FILE_NAME}")
+ ADD_CUSTOM_COMMAND(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}
+ COMMAND ${CMAKE_JAVA_COMPILER}
+ ARGS ${CMAKE_JAVA_COMPILE_FLAGS}
+ -classpath ${CMAKE_JAVA_INCLUDE_PATH_TOTAL}
+ ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}
+ -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/
+ TARGET ${LIBRARYNAME}_target
+ OUTPUTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${CLASS_FILE}.class"
+ COMMENT "Java File" )
+ SET(CMAKE_JAVA_ALL_CLASS_FILES ${CMAKE_JAVA_ALL_CLASS_FILES} ${CLASS_FILE}.class)
+ SET(CMAKE_JAVA_ALL_CLASS_FILE_PATHS ${CMAKE_JAVA_ALL_CLASS_FILE_PATHS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${CLASS_FILE}.class)
+ ENDIF(SKIP)
     ENDFOREACH(SOURCE)
     IF(LIBRARY_OUTPUT_PATH)
       SET(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH})
     ELSE(LIBRARY_OUTPUT_PATH)
       SET(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
     ENDIF(LIBRARY_OUTPUT_PATH)
- ADD_CUSTOM_COMMAND(SOURCE ${CMAKE_JAVA_ALL_CLASS_FILES}
+ ADD_CUSTOM_COMMAND(SOURCE ${CMAKE_JAVA_ALL_CLASS_FILE_PATHS}
                        COMMAND ${CMAKE_COMMAND}
                        ARGS -E chdir ${CMAKE_CURRENT_BINARY_DIR}
- ${CMAKE_JAVA_ARCHIVE}
- -cvf ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}/${LIBRARYNAME}.jar *.class
+ ${CMAKE_JAVA_ARCHIVE}
+ -cvf ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}/${LIBRARYNAME}.jar ${CMAKE_JAVA_ALL_CLASS_FILES}
                        TARGET ${LIBRARYNAME}_target
- DEPENDS ${CMAKE_JAVA_ALL_CLASS_FILES}
+ DEPENDS ${CMAKE_JAVA_ALL_CLASS_FILE_PATHS}
                        OUTPUTS ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}/${LIBRARYNAME}.jar
                        COMMENT "Java Archive")
     ADD_CUSTOM_COMMAND(SOURCE ${LIBRARYNAME}_target
@@ -63,4 +72,4 @@
   ELSE(CMAKE_JAVA_COMPILER AND CMAKE_JAVA_ARCHIVE)
     MESSAGE(SEND_ERROR "Java compiler and/or Java archiver not found")
   ENDIF(CMAKE_JAVA_COMPILER AND CMAKE_JAVA_ARCHIVE)
-ENDMACRO(ADD_JAVA_LIBRARY LIBRARYNAME SOURCES)
\ No newline at end of file
+ENDMACRO(ADD_JAVA_LIBRARY LIBRARYNAME SOURCES)
No tags attached.
Issue History
2016-06-10 14:27Kitware RobotNote Added: 0041295
2016-06-10 14:27Kitware RobotStatusassigned => resolved
2016-06-10 14:27Kitware RobotResolutionopen => moved
2016-06-10 14:30Kitware RobotStatusresolved => closed

Notes
(0006504)
Bill Hoffman   
2007-02-21 10:46   
Will this work with 2.4.6?
(0041295)
Kitware Robot   
2016-06-10 14:27   
Resolving issue as `moved`.

This issue tracker is no longer used. Further discussion of this issue may take place in the current CMake Issues page linked in the banner at the top of this page.