cmake java 演示项目无法用我的 MANIFEST.MF 创建 "jar"
cmake java demo project cannot create "jar" with my MANIFEST.MF
我有一个非常简单的 cmake java 项目
(1) CMakeLists.txt:
cmake_minimum_required (VERSION 2.8)
find_package(Java)
include(UseJava)
enable_testing()
project (HelloWorld)
set(CMAKE_JAVA_COMPILE_FLAGS "-source" "1.8" "-target" "1.8")
set(CMAKE_JAVA_MANIFEST MANIFEST.MF)
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}")
(2) HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
(3) MANIFEST.MF
Manifest-Version: 1.0
Extension-Name: My
Implementation-Version: 1.1
Main-Class: HelloWorld
(4) 制作。 && 使
-- Jar file /root/mynet/mytest/build/useCmake/forJava/HelloWorld.jar
-- Class compiled to /root/mynet/mytest/build/useCmake/forJava/CMakeFiles/HelloWorld.dir
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mynet/mytest/build/useCmake/forJava
/usr/bin/cmake -H/root/mynet/mytest/build/useCmake/forJava -B/root/mynet/mytest/build/useCmake/forJava --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /root/mynet/mytest/build/useCmake/forJava/CMakeFiles /root/mynet/mytest/build/useCmake/forJava/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/root/mynet/mytest/build/useCmake/forJava'
make -f CMakeFiles/HelloWorld.dir/build.make CMakeFiles/HelloWorld.dir/depend
make[2]: Entering directory '/root/mynet/mytest/build/useCmake/forJava'
cd /root/mynet/mytest/build/useCmake/forJava && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /root/mynet/mytest/build/useCmake/forJava /root/mynet/mytest/build/useCmake/forJava /root/mynet/mytest/build/useCmake/forJava /root/mynet/mytest/build/useCmake/forJava /root/mynet/mytest/build/useCmake/forJava/CMakeFiles/HelloWorld.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/root/mynet/mytest/build/useCmake/forJava'
make -f CMakeFiles/HelloWorld.dir/build.make CMakeFiles/HelloWorld.dir/build
make[2]: Entering directory '/root/mynet/mytest/build/useCmake/forJava'
make[2]: Nothing to be done for 'CMakeFiles/HelloWorld.dir/build'.
make[2]: Leaving directory '/root/mynet/mytest/build/useCmake/forJava'
[100%] Built target HelloWorld
make[1]: Leaving directory '/root/mynet/mytest/build/useCmake/forJava'
/usr/bin/cmake -E cmake_progress_start /root/mynet/mytest/build/useCmake/forJava/CMakeFiles 0
好的,看起来不错,但是
java -jar HelloWorld.jar
no main manifest attribute, in HelloWorld.jar
我检查了我 jar 中的 META-INF/MANIFEST.MF,它不是我自己的 MANIFEST:
jar tvf HelloWorld.jar
0 Tue Feb 19 03:56:08 GMT 2019 META-INF/
69 Tue Feb 19 03:56:08 GMT 2019 META-INF/MANIFEST.MF
427 Tue Feb 19 03:49:20 GMT 2019 HelloWorld.class
它只包含 2 行:
Manifest-Version: 1.0
Created-By: 1.8.0_191 (Oracle Corporation)
看来我的清单文件没有生效。如何解决?
非常感谢
To define a custom manifest for the jar, you can set it with the
manifest named argument:
add_jar(example MANIFEST /path/to/manifest)
但是请注意,我从未听说过有人使用 cmake 来构建 Java 代码。
看看 maven、ivy 或 gradle——它们得到了积极的支持和开发。
我有一个非常简单的 cmake java 项目
(1) CMakeLists.txt:
cmake_minimum_required (VERSION 2.8)
find_package(Java)
include(UseJava)
enable_testing()
project (HelloWorld)
set(CMAKE_JAVA_COMPILE_FLAGS "-source" "1.8" "-target" "1.8")
set(CMAKE_JAVA_MANIFEST MANIFEST.MF)
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}")
(2) HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
(3) MANIFEST.MF
Manifest-Version: 1.0
Extension-Name: My
Implementation-Version: 1.1
Main-Class: HelloWorld
(4) 制作。 && 使
-- Jar file /root/mynet/mytest/build/useCmake/forJava/HelloWorld.jar
-- Class compiled to /root/mynet/mytest/build/useCmake/forJava/CMakeFiles/HelloWorld.dir
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mynet/mytest/build/useCmake/forJava
/usr/bin/cmake -H/root/mynet/mytest/build/useCmake/forJava -B/root/mynet/mytest/build/useCmake/forJava --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /root/mynet/mytest/build/useCmake/forJava/CMakeFiles /root/mynet/mytest/build/useCmake/forJava/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/root/mynet/mytest/build/useCmake/forJava'
make -f CMakeFiles/HelloWorld.dir/build.make CMakeFiles/HelloWorld.dir/depend
make[2]: Entering directory '/root/mynet/mytest/build/useCmake/forJava'
cd /root/mynet/mytest/build/useCmake/forJava && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /root/mynet/mytest/build/useCmake/forJava /root/mynet/mytest/build/useCmake/forJava /root/mynet/mytest/build/useCmake/forJava /root/mynet/mytest/build/useCmake/forJava /root/mynet/mytest/build/useCmake/forJava/CMakeFiles/HelloWorld.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/root/mynet/mytest/build/useCmake/forJava'
make -f CMakeFiles/HelloWorld.dir/build.make CMakeFiles/HelloWorld.dir/build
make[2]: Entering directory '/root/mynet/mytest/build/useCmake/forJava'
make[2]: Nothing to be done for 'CMakeFiles/HelloWorld.dir/build'.
make[2]: Leaving directory '/root/mynet/mytest/build/useCmake/forJava'
[100%] Built target HelloWorld
make[1]: Leaving directory '/root/mynet/mytest/build/useCmake/forJava'
/usr/bin/cmake -E cmake_progress_start /root/mynet/mytest/build/useCmake/forJava/CMakeFiles 0
好的,看起来不错,但是
java -jar HelloWorld.jar
no main manifest attribute, in HelloWorld.jar
我检查了我 jar 中的 META-INF/MANIFEST.MF,它不是我自己的 MANIFEST:
jar tvf HelloWorld.jar
0 Tue Feb 19 03:56:08 GMT 2019 META-INF/
69 Tue Feb 19 03:56:08 GMT 2019 META-INF/MANIFEST.MF
427 Tue Feb 19 03:49:20 GMT 2019 HelloWorld.class
它只包含 2 行:
Manifest-Version: 1.0
Created-By: 1.8.0_191 (Oracle Corporation)
看来我的清单文件没有生效。如何解决? 非常感谢
To define a custom manifest for the jar, you can set it with the manifest named argument:
add_jar(example MANIFEST /path/to/manifest)
但是请注意,我从未听说过有人使用 cmake 来构建 Java 代码。
看看 maven、ivy 或 gradle——它们得到了积极的支持和开发。