如何使用清单和模块UseJava添加清单文件? [英] How to add a MANIFEST file usig cmake and module UseJava?

查看:197
本文介绍了如何使用清单和模块UseJava添加清单文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目标很简单.将MANNIFEST文件添加到最终的jar存档中.

Goal is simple. adding a MANNIFEST file into final jar archive.

为此,我阅读了许多文档,但是我错过了正确的信息.最后,我要向您寻求帮助,在此先感谢您.

For this I read many documentation but i miss the right information. Finally I come to you to get some help, thanks in advance.

我做什么?

cmake_minimum_required(VERSION 2.8)
find_package(Java REQUIRED)
include(UseJava)

enable_testing()
project(DAI)

set( cwd                            "${CMAKE_CURRENT_SOURCE_DIR}"                           )
set( AIName                         "SkirmishDAI"                                                   )
set( SRC_DIR                        "${cwd}/src"                                            )
set( LIB_DIR                        "${cwd}/libs"                                           )

set( MAJOR_VERSION                  0                                                       )
set( MINOR_VERSION                  1                                                       )
set( PATCH_VERSION                  0                                                       )
set( VERSION                        "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}"    )

set( CMAKE_JAVA_INCLUDE_PATH        "${LIB_DIR}"                                            )
set( CMAKE_JAVA_COMPILE_FLAGS       "-source" "1.7" "-target" "1.7"                         )

set( DAI_JAR_NAME                   "${AIName}-${VERSION}.jar"                              )
set( DAI_JAR_FILE                   "${CMAKE_JAVA_TARGET_OUTPUT_DIR}/${DAI_JAR_NAME}"       )
set( DAI_MANIFEST                   "${CMAKE_CURRENT_BINARY_DIR}/META-INF/MANIFEST.MF"      )
configure_file("manifest.extras.in" "${DAI_MANIFEST}" @ONLY                                 )

FILE( GLOB_RECURSE JAVA_SRC_FILES   "${SRC_DIR}/main/java/*.java"                           )
FILE( GLOB_RECURSE JAVA_TEST_FILES  "${SRC_DIR}/test/java/*.java"                           )

add_jar( ${AIName} ${JAVA_SRC_FILES} ${JAVA_TEST_FILES} VERSION ${VERSION} MANIFEST ${DAI_MANIFEST} )

这会将清单文件添加到jar文件中,但是位置不正确.

This will add into the jar file a manifest … but a wrong place.

这意味着,当清单转到 $ {CMAKE_CURRENT_BINARY_DIR}/META-INF/MANIFEST.MF 时,我将在 META-INF/MANIFEST.MF

That mean, when manifest go to ${CMAKE_CURRENT_BINARY_DIR}/META-INF/MANIFEST.MF, I will get the same full path in the jar file intead of META-INF/MANIFEST.MF

jarfile

 /
 /com/cool/app/Main.class
 /mypath/to/bin/dir/META-INF/MANIFEST.MF

我希望得到

jarfile

 /
 /com/cool/app/Main.class
 /META-INF/MANIFEST.MF

更新:执行以下命令:

$ make VERBOSE=1
…
[ 31%] Creating Java archive SkirmishDAI-0.1.0.jar
cd /mnt/data/projects/spring/build/AI/Skirmish/DAI/CMakeFiles/SkirmishDAI.dir && /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65-2.5.2.5.fc20.x86_64/bin/jar -cf /mnt/data/projects/spring/build/AI/Skirmish/DAI/SkirmishDAI-0.1.0.jar /mnt/data/projects/spring/build/AI/Skirmish/DAI/META-INF/MANIFEST.MF @java_class_filelist
cd /mnt/data/projects/spring/build/AI/Skirmish/DAI/CMakeFiles/SkirmishDAI.dir && /usr/bin/cmake -D_JAVA_TARGET_DIR=/mnt/data/projects/spring/build/AI/Skirmish/DAI -D_JAVA_TARGET_OUTPUT_NAME=SkirmishDAI-0.1.0.jar -D_JAVA_TARGET_OUTPUT_LINK=SkirmishDAI.jar -P /usr/share/cmake/Modules/UseJavaSymlinks.cmake.
…

推荐答案

问题可能是由于以下几行中的路径重复造成的:

The problem likely stems from a duplicated path in the following lines:

set( DAI_MANIFEST                   "${CMAKE_CURRENT_BINARY_DIR}/META-INF/MANIFEST.MF"      )
configure_file("manifest.extras.in" "${CMAKE_CURRENT_BINARY_DIR}/${DAI_MANIFEST}" @ONLY                             )

您可能是说:

set( DAI_MANIFEST                   "${CMAKE_CURRENT_BINARY_DIR}/META-INF/MANIFEST.MF"      )
configure_file("manifest.extras.in" "${DAI_MANIFEST}" @ONLY                             )

这篇关于如何使用清单和模块UseJava添加清单文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆