Java CMake:使用多个jar依赖项生成jar文件(源代码外构建)

Java CMake:使用多个jar依赖项生成jar文件(源代码外构建),java,cmake,Java,Cmake,我花了几天时间用CMake(3.5.2)做了以下工作。使用源代码外构建,创建一个依赖于多个外部jar依赖项的jar文件。在我的清单中,我只想指定主类,而不想指定其他类 这是我在croco/owl2gdb/CMakeLists.txt目录中的内容: cmake_minimum_required (VERSION 3.5) find_package(Java REQUIRED) include(UseJava) project (owl2gdb) SET(CLASSPATH ${CMAKE_

我花了几天时间用CMake(3.5.2)做了以下工作。使用源代码外构建,创建一个依赖于多个外部jar依赖项的jar文件。在我的清单中,我只想指定主类,而不想指定其他类

这是我在croco/owl2gdb/CMakeLists.txt目录中的内容:

cmake_minimum_required (VERSION 3.5)

find_package(Java REQUIRED)

include(UseJava)

project (owl2gdb)

SET(CLASSPATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/commons-lang3-3.3.2.jar:${CMAKE_CURRENT_SOURCE_DIR}/lib/concurrentlinkedhashmap-lru-1.4.2.jar:${CMAKE_CURRENT_SOURCE_DIR}/lib/HermiT.jar)

list(APPEND CMAKE_JAVA_INCLUDE_PATH ${CLASSPATH})

SET(SOURCE
  ${CMAKE_CURRENT_SOURCE_DIR}/src/owl2gdb/OWL2GDB.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/graphdatabase/GraphDatabase.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp/CPPFileWriter.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp/CppHeaderFileWriter.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp/CppSourceFileWriter.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp/CppTextTemplate.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp/GraphDatabaseHeaderWriter.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp/GraphDatabaseSourceWriter.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/knowledge/MyOntology.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/knowledge/MyOWLClass.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/knowledge/MyOWLDataProperty.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/knowledge/MyOWLObjectProperty.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/knowledge/MyOWLOntology.java
  ${CMAKE_CURRENT_SOURCE_DIR}/src/tool/Util.java)


set(JAVA_JAR_ENTRY_POINT owl2gdb/OWL2GDB)

add_jar(owl2gdb ${SOURCE})

    add_custom_command(TARGET owl2gdb
        POST_BUILD
        COMMAND jar u0fm owl2gdb.jar ${CMAKE_CURRENT_SOURCE_DIR}/META-INF/MANIFEST.MF ${SOURCE}
    )
在我的根目录中,我执行以下操作:

mkdir_构建

cd_构建

克马克

制造

owl2gdb.jar确实是在_build/owl2gdb/owl2gdb.jar中生成的。然后

cd owl2gdb

java-jar owl2gdb.jar

给我

线程“main”java.lang.NoClassDefFoundError中出现异常:com/martiansoftware/jsap/StringParser

基本上,我的owl2gdb.jar中不包括外部jar。我真的不知道从这里到哪里去。cmake没有正确使用cmake\u JAVA\u INCLUDE\u路径是否存在问题?我的CMakeLists.txt中缺少什么

一个
jar tf owl2gdb.jar
返回:

META-INF/
META-INF/MANIFEST.MF
tool/Util.class
graphdatabase/GraphDatabase$1.class
graphdatabase/GraphDatabase.class
cpp/CPPFileWriter.class
cpp/GraphDatabaseHeaderWriter.class
cpp/CppHeaderFileWriter.class
cpp/CppTextTemplate.class
cpp/CppSourceFileWriter.class
cpp/GraphDatabaseSourceWriter.class
owl2gdb/OWL2GDB.class
knowledge/MyOWLClass.class
knowledge/MyOWLDataProperty.class
knowledge/MyOntology.class
knowledge/MyOWLObjectProperty.class
knowledge/MyOWLOntology.class
usr/local/me/github/croco/owl2gdb/src/owl2gdb/OWL2GDB.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/graphdatabase/GraphDatabase.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/cpp/CPPFileWriter.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/cpp/CppHeaderFileWriter.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/cpp/CppSourceFileWriter.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/cpp/CppTextTemplate.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/cpp/GraphDatabaseHeaderWriter.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/cpp/GraphDatabaseSourceWriter.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/knowledge/MyOntology.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/knowledge/MyOWLClass.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/knowledge/MyOWLDataProperty.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/knowledge/MyOWLObjectProperty.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/knowledge/MyOWLOntology.java
usr/local/me/github/croco/owl2gdb/src/owl2gdb/src/tool/Util.java
这是我清单上唯一的东西:

Main-Class: owl2gdb.OWL2GDB

不要使用CMake,而是使用为java构建的工具,如ivy、ant等。@CantleepNow CMake已经具备了这些功能。我只是想学习如何正确使用它们。我用ANT实现了我的目标。我只想了解我的CMakeLists.txt中缺少什么。