java - cmake jar包无法执行: no main manifest attribute

标签 java jar cmake manifest program-entry-point

我从互联网上得到了一个非常简单的 cmake-java 项目,如下所示:

猫HelloWorld.java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

然后是 CMakeLists.txt 文件:

cmake_minimum_required (VERSION 2.8)
find_package(Java REQUIRED)
include(UseJava)
enable_testing()
project (HelloWorld)
set(CMAKE_JAVA_COMPILE_FLAGS "-source" "1.8" "-target" "1.8")
add_jar(HelloWorld HelloWorld.java)
get_target_property(_jarFile HelloWorld JAR_FILE)
get_target_property(_classDir HelloWorld CLASSDIR)
message(STATUS "Jar file ${_jarFile}")
message(STATUS "Class compiled to ${_classDir}")
add_test(NAME TestHelloWorld COMMAND ${Java_JAVA_EXECUTABLE} -cp ${_jarFile} HelloWorld)

我在centos7上,jdk 1.8和cmake 3.8,然后

cmake . && make -j8

有HelloWorld.jar文件,运行时出错:

java -jar HelloWorld.jar HelloWorld

no main manifest attribute, in HelloWorld.jar

是的,里面没有主类定义:

$ cat META-INF/MANIFEST.MF 
Manifest-Version: 1.0
Created-By: 1.8.0_191 (Oracle Corporation)

我只是想知道如何使用cmake将内容添加到MANIFEST.MF中,你能帮忙解释一下吗? 非常感谢。

最佳答案

使用 add_jarMANIFEST 选项命令添加自定义 list 文件。

例如,要从当前 cmake 源目录添加 list 文件,请使用:

add_jar(HelloWorld HelloWorld.java MANIFEST "${CMAKE_CURRENT_SOURCE_DIR}/MANIFEST.MF")

关于java - cmake jar包无法执行: no main manifest attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54623030/

相关文章:

java - 如何在日志文件log4j中只写入INFO日志?

java - 对 Liquibase 脚本执行检查

java - GWT依赖的解释

java - jar 文件和图像有问题

eclipse - 使用 cmake -> eclipse CDT 项目生成器进行项目特定设置?

java - 如何在异常处理中删除部分消息 java.lang.IllegalArgumentException

java - Java 子类的父类(super class)方法

Java 类加载器无法在 jar 文件中找到资源

bash - Jenkins : Environment variables not available in CMake

cmake - 设置 CMake OBJECT 库的输出目录