在dos命令下打jar,war,ear包

本文介绍如何利用jar命令进行项目的打包与解包操作。具体包括如何使用jarcvf命令来创建war、jar和ear格式的包文件,并且演示了如何通过指定*.*来包含项目中的所有文件。
在Dos命令下-->目目录下:
jar cvf project.war *.*用命令进入如果打包的文件内部:
jar cvf  文件名.war *.* 文件名.war
文件名.jar
文件名.ear
*.*代表项目文件中所有的文件
Jar cvf  MyWeb.war *.*//打包Jar tvf  MyWeb.war *.*//查看包Jar xvf  MyWeb.war *.*//解包
#!/bin/bash # 下载的目录 SOURCE_DIR="/root/a" #需发的文件名 FILE_LIST="file_list.txt" #生成的发ant命令 OUTPUT_FILE="11.txt" # 创建正式的备份目录 backup_dir="backup_$(date '+%Y%m%d')" mkdir -p "$backup_dir" # EJB子目录与构建文件的映射 declare -A EJB_MAPPING=( ["LkmAgvEjbs.ear"]="agv.xml" ["LkmBiEjbs.ear"]="bi.xml" ["LkmBoardEjbs.ear"]="board.xml" ["LkmCommonEjbs.ear"]="commejb.xml" ["LkmConvertEjbs.ear"]="convert.xml" ["LkmDataSwitch.ear"]="dataswitch.xml" ["LkmDatatransfer.ear"]="datatrans.xml" ["LkmFopEjbs.ear"]="fopejb.xml" ["LkmJmsEjbs.ear"]="jmsejb.xml" ["LkmMachineEjbs.ear"]="machine.xml" ["LkmNcEjbs.ear"]="ncejb.xml" ["LkmOrderEjbs.ear"]="order.xml" ["LkmPlatformEjbs.ear"]="platform.xml" ["LkmPoiEjbs.ear"]="poiejb.xml" ["LkmPrintEjbs.ear"]="print.xml" ["LkmProgramEjbs.ear"]="program.xml" ["LkmQcEjbs.ear"]="qc.xml" ["LkmQuoteEjbs.ear"]="quoteejb.xml" ["LkmToolEjbs.ear"]="tool.xml" ["LkmUmsEjbs.ear"]="umsejb.xml" ["WorkTimeEjbs.ear"]="worktime.xml" ) # 主目录与构建文件的映射 declare -A MAIN_MAPPING=( ["jsf_apps"]="pmi.xml" ["restful_apps"]="rest.xml" ["shared_library"]="remote.xml" ) # 检查前置条件 check_prerequisites() { if [ ! -f "$FILE_LIST" ]; then echo "错误: 文件列表 $FILE_LIST 不存在" exit 1 fi if [ ! -d "$SOURCE_DIR" ]; then echo "错误: 源目录 $SOURCE_DIR 不存在" exit 1 fi } # 生成Ant命令 generate_ant_command() { local filename="$1" local location="$2" case "$location" in ejb_apps/LkmAgvEjbs.ear) echo "ant -f agv.xml -Djar=$filename" ;; ejb_apps/LkmBiEjbs.ear) echo "ant -f bi.xml -Djar=$filename" ;; ejb_apps/LkmBoardEjbs.ear) echo "ant -f board.xml -Djar=$filename" ;; ejb_apps/LkmCommonEjbs.ear) echo "ant -f commejb.xml -Djar=$filename" ;; ejb_apps/LkmConvertEjbs.ear) echo "ant -f convert.xml -Djar=$filename" ;; ejb_apps/LkmDataSwitch.ear) echo "ant -f dataswitch.xml -Djar=$filename" ;; ejb_apps/LkmDatatransfer.ear) echo "ant -f datatrans.xml -Djar=$filename" ;; ejb_apps/LkmFopEjbs.ear) echo "ant -f fopejb.xml -Djar=$filename" ;; ejb_apps/LkmJmsEjbs.ear) echo "ant -f jmsejb.xml -Djar=$filename" ;; ejb_apps/LkmMachineEjbs.ear) echo "ant -f machine.xml -Djar=$filename" ;; ejb_apps/LkmNcEjbs.ear) echo "ant -f ncejb.xml -Djar=$filename" ;; ejb_apps/LkmOrderEjbs.ear) echo "ant -f order.xml -Djar=$filename" ;; ejb_apps/LkmPlatformEjbs.ear) echo "ant -f platform.xml -Djar=$filename" ;; ejb_apps/LkmPoiEjbs.ear) echo "ant -f poiejb.xml -Djar=$filename" ;; ejb_apps/LkmPrintEjbs.ear) echo "ant -f print.xml -Djar=$filename" ;; ejb_apps/LkmProgramEjbs.ear) echo "ant -f program.xml -Djar=$filename" ;; ejb_apps/LkmQcEjbs.ear) echo "ant -f qc.xml -Djar=$filename" ;; ejb_apps/LkmQuoteEjbs.ear) echo "ant -f quoteejb.xml -Djar=$filename" ;; ejb_apps/LkmToolEjbs.ear) echo "ant -f tool.xml -Djar=$filename" ;; ejb_apps/LkmUmsEjbs.ear) echo "ant -f umsejb.xml -Djar=$filename" ;; ejb_apps/WorkTimeEjbs.ear) echo "ant -f worktime.xml -Djar=$filename" ;; jsf_apps) echo "ant -f pmi.xml -Djar=$filename" ;; restful_apps) echo "ant -f rest.xml -Djar=$filename" ;; shared_library) echo "ant -f remote.xml -Djar=$filename" ;; *) echo "# 未知位置: $location" ;; esac } # 同步单个文件 sync_single_file() { local filename="$1" local source_file="$SOURCE_DIR/$filename" echo "处理文件: $filename" local ant_commands=() local found_in_ejb=false # 优先在EJB子目录中查找(限制深度2层) for subdir in "${!EJB_MAPPING[@]}"; do local target_path="ejb_apps/$subdir/$filename" if [ -f "$target_path" ]; then # 备份原文件 cp "$target_path" "$backup_dir/" 2>/dev/null # 覆盖文件 cp "$source_file" "$target_path" ant_commands+=("$(generate_ant_command "$filename" "ejb_apps/$subdir")") echo " ✓ 已覆盖到: ejb_apps/$subdir" found_in_ejb=true fi done # 如果在EJB子目录中没找到,再在jsf目录中查找(限制深度2层) if [ "$found_in_ejb" = false ]; then for maindir in "${!MAIN_MAPPING[@]}"; do local target_path="jsf_apps/LkmPmi.ear/LkmPmi.war/WEB-INF/lib/$filename" if [ -f "$target_path" ]; then # 备份原文件 cp "$target_path" "$backup_dir/" 2>/dev/null # 覆盖文件 cp "$source_file" "$target_path" ant_commands+=("$(generate_ant_command "$filename" "$maindir")") echo " ✓ 已覆盖到: $maindir" found_in_ejb=true fi done fi # 如果在jsf目录中没找到,再在restful目录中查找(限制深度2层) if [ "$found_in_ejb" = false ]; then for maindir in "${!MAIN_MAPPING[@]}"; do local target_path="restful_apps/LkmRestful.ear/LkmRestful.war/WEB-INF/lib/$filename" if [ -f "$target_path" ]; then # 备份原文件 cp "$target_path" "$backup_dir/" 2>/dev/null # 覆盖文件 cp "$source_file" "$target_path" ant_commands+=("$(generate_ant_command "$filename" "$maindir")") echo " ✓ 已覆盖到: $maindir" found_in_ejb=true fi done fi # 如果在restful目录中没找到,再在shared_library目录中查找(限制深度2层) if [ "$found_in_ejb" = false ]; then for maindir in "${!MAIN_MAPPING[@]}"; do local target_path="shared_library/lkm.ejb.remote.ear/APP-INF\lib/$filename" if [ -f "$target_path" ]; then # 备份原文件 cp "$target_path" "$backup_dir/" 2>/dev/null # 覆盖文件 cp "$source_file" "$target_path" ant_commands+=("$(generate_ant_command "$filename" "$maindir")") echo " ✓ 已覆盖到: $maindir" fi done fi # 将生成的Ant命令写入11.txt for cmd in "${ant_commands[@]}"; do echo "$cmd" >> "$OUTPUT_FILE" done if [ ${#ant_commands[@]} -eq 0 ]; then echo " ❌ 未找到在四个目录中" else echo " ✅ 生成 ${#ant_commands[@]} 个构建命令" fi echo "----------------------------------------" } # 主函数 main() { check_prerequisites # 清空输出文件 > "$OUTPUT_FILE" echo "开始增强版文件同步任务(目录深度限制: 2层)" echo "源目录: $SOURCE_DIR" echo "" local total_files=0 # 读取文件列表并处理 while IFS= read -r filename; do if [[ -z "$filename" || "$filename" =~ ^# ]]; then continue fi filename=$(echo "$filename" | tr -d '\r' | xargs) ((total_files++)) sync_single_file "$filename" echo "" done < "$FILE_LIST" echo "========================================" echo "增强版同步任务完成!" echo "处理文件数: $total_files" echo "构建命令已保存到: $OUTPUT_FILE" } main "$@" <code_end>
最新发布
11-19
<think>嗯,用户想用DOS命令Java程序打JAR。我得先理清楚步骤,确保每一步都正确。首先,可能需要确认用户已经安装了Java开发工具(JDK),因为jar命令是JDK的一部分。如果用户没有配置环境变量,可能需要指导他们如何检查JDK的安装情况。 接下来,用户需要编译Java源代码,生成.class文件。这里应该提醒用户使用javac命令,并且注意文件路径是否正确。比如,如果代码中有结构,必须确保目录结构符合名,否则编译会失败。 然后是打JAR的步骤。使用jar命令的cvfm参数来创建带有清单文件的JAR。需要解释每个参数的意义,比如c表示创建,v是详细输出,f指定文件名,m指定清单文件。另外,清单文件中的Main-Class属性必须正确,这样用户才能通过java -jar运行JAR。 用户可能会遇到的一些常见问题,比如找不到主类或者无法运行JAR。这时候需要检查清单文件是否正确,主类名是否拼写正确,以及是否有正确的换行符。还有可能忘记含所有的.class文件,导致运行时缺少类。 另外,如果用户的项目有多个依赖库,可能需要更复杂的步骤,比如指定类路径或者构建可执行的JAR。但根据问题描述,用户可能只是处理一个简单的项目,所以暂时不需要涉及依赖管理。不过,可以稍微提一下,如果遇到复杂情况,可以考虑使用构建工具如Maven或Gradle,但主要还是聚焦在DOS命令的手动打上。 最后,确保示例中的命令格式正确,路径和文件名替换正确。比如,用户需要将“com/example/Main.class”替换成自己实际的类路径。同时提醒在打前先编译成功,否则JAR可能缺少必要的类文件。 总结一下,步骤应该是:编译源代码 -> 创建清单文件 -> 打JAR -> 验证JAR是否可运行。需要详细解释每一步的命令和可能出现的问题,帮助用户顺利完成打过程。</think>使用DOS命令Java程序打JAR的步骤如下: ----- $$ \text{步骤总览} $$ 1. 编译Java源代码 2. 创建清单文件(可选) 3. 执行打命令 4. 验证JAR ----- 一、编译Java源代码 $$ javac -d . YourProgram.java $$ • `-d .` 参数指定编译输出到当前目录 • 若结构,需保持文件目录与名一致 例:`javac -d . com/example/Main.java` 二、创建清单文件(MANIFEST.MF) ```text Manifest-Version: 1.0 Main-Class: com.example.Main ``` 注意:结尾必须有一个空行 三、打命令 $$ jar cvfm YourApp.jar MANIFEST.MF com/example/*.class $$ 参数说明: $$ \begin{cases} c & \text{创建新归档} \\ v & \text{生成详细输出} \\ f & \text{指定归档文件名} \\ m & \text{含清单信息} \end{cases} $$ 四、验证运行 $$ java -jar YourApp.jar $$ 常见问题处理: 1. 找不到主清单属性: - 检查清单文件中的`Main-Class`格式 - 确认类名全路径正确 2. 文件含问题: - 使用通配符打时确保路径正确 $$ jar cvf MyLib.jar -C classes/ . $$ 进阶技巧: - 自动生成清单(无Main-Class时): $$ jar cvfe YourApp.jar com.example.Main *.class $$ - 含资源文件: $$ jar cvf YourApp.jar *.class config.properties images/ $$ 建议: 对于复杂项目,推荐使用构建工具(Maven/Gradle),但对于简单程序或学习目的,直接使用jar命令更直观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值