理解java 打包jar 过程
遇到的问题
调用了一个java的人脸识别库
识别库 依赖了 so 动态链接库
以及 第三方 jar 库
为了将 整个 项目打包成为一个 可以直接运行的 jar 文件
记录一下流程
第一步 源代码 编译 class 文件
windows 平台 所以 加上了 -encoding utf8 选项
-d . 代表生成 class 的目录结构
-cp 代表 第三方的 class 依赖 也可以是 jar 文件
so 直接在程序中按照绝对路径加载 就可以了
FaceEngineTest.java 是源代码 入口文件
javac -encoding utf8 -d . -cp C:\gitproj\javaSwing\lib\arcsoft-sdk-face-3.0.0.0.jar FaceEngineTest.java
根据class 生成 jar 包
编写 打包任务 清单
manf 文件
更详细的指南可以参考
https://www.w3cschool.cn/java/java-io-jar-manifest.html
manf 文件内容
Main-Class: FaceEngineTest Class-Path: arcsoft-sdk-face-3.0.0.0.jar
jar打包命令
-c, --create 创建档案
-v, --verbose 在标准输出中生成详细输出
-f, --file=FILE 档案文件名。省略时, 基于操作 使用 stdin 或 stdout、
-m, --manifest=FILE 包含指定清单文件中的 清单信息
jar cvfm demo.jar manf .\FaceEngineTest.class
使用命令
java -jar .\demo.jar [com.arcsoft.face.Rect(116, 124 - 365, 373),1] 特征值大小:1032 [com.arcsoft.face.Rect(116, 124 - 365, 373),1] 特征值大小:1032 相似度:1.0 性别:0
help 说明
法: jar [OPTION...] [ [--release VERSION] [-C dir] files] ... jar 创建类和资源的档案, 并且可以处理档案中的 单个类或资源或者从档案中还原单个类或资源。 示例: # 创建包含两个类文件的名为 classes.jar 的档案: jar --create --file classes.jar Foo.class Bar.class # 使用现有的清单创建档案, 其中包含 foo/ 中的所有文件: jar --create --file classes.jar --manifest mymanifest -C foo/ . # 创建模块化 jar 档案, 其中模块描述符位于 # classes/module-info.class: jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/ classes resources # 将现有的非模块化 jar 更新为模块化 jar: jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/ module-info.class # 创建包含多个发行版的 jar, 并将一些文件放在 META-INF/versions/9 目录中: jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes