[CMake] Is there a tool pretty much like cmake for Java?

Ben Boeckel ben.boeckel at kitware.com
Fri Oct 22 16:45:42 EDT 2010


On Sat, Oct 16, 2010 at 01:35:27PM +0200, Andreas Schneider wrote:
> http://git.cynapses.org/users/asn/pki.git/tree/cmake/Modules/UseJava.cmake?h=cmake
> http://git.cynapses.org/users/asn/pki.git/tree/cmake/Modules/JavaClassFilelist.cmake?h=cmake

Hi,

These work great, however I did find a few issues with them for a
project I'm working on moving to CMake. I fixed these issues here and
the new UseJava.cmake is attached:

  - Resources changing doesn't trigger a rebuild
    Solution:
        add_custom_command to copy each resource file.
  - Allow .jar files to be specified in the sources list
    Solution:
        Search the source paths for a .jar extension and add them to the
        include path if found.
  - Allow target names to be given in the sources list
    Solution:
        When there is no extension (this introduces some corner cases;
        not sure if they're acceptable), link to the .jar output for
        that target.
  - Allow dependencies on generated .java files
    Solution:
        Use add_custom_command(OUTPUT ...) to allow for dependencies for
        that output file to be listed. This requires a list of output
        .class files to be made and listed as what the javac command
        generates and then as a dependency for the jar command.
  - The local UseJava{ClassFilelist,Symlinks} should probably be baked
    into UseJava.cmake; I haven't done this work yet. The related
    commands are just commented out. Symlinks seems to be all that's
    needed.
  - Allow output jar files to be dependencies of other commands ()
  - Some variable usage was wrong (CMAKE_JAVA_LIBRARY_OUTPUT_PATH was
    set above, but then not used below)
  - Add function to search for .jar files. I'm not sure if the list of
    default paths is good enough.
  - Some style changes (no dangling parentheses).

There's one hack in determining the relative path (search for _BIN_LEN)
to create the final classpath for each file. It works here, but I'm not
really a Java guy and other use cases may have been broken by this.

--Ben


More information about the CMake mailing list